K8S集群部署Ubuntu版本
安装/配置容器运行环境
本文选用containerd作为K8S CRI的实现。
内核参数配置
加载必须的内核模块(所有节点):
tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
使用以下方法配置 Kubernetes 的关键内核参数:
tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables # 1
net.bridge.bridge-nf-call-iptables # 1
net.ipv4.ip_forward # 1
EOF
sysctl --system运行环境安装
安装containerd:
apt -y install containerd
修改containerd配置,
mkdir /etc/containerd/
#产生containerd默认配置文件
containerd config default > /etc/containerd/config.toml
#将sanbox_image镜像源由k8s.io替换为阿里云google_containers镜像源
sed -i "s#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
配置containerd cgroup驱动程序systemd
sed -i 's#SystemdCgroup # false#SystemdCgroup # true#g' /etc/containerd/config.toml
# 查看SystemdCgroup参数
grep SystemdCgroup /etc/containerd/config.toml
# 重启containerd
systemctl restart containerd加速器配置(可选)
Containerd通过在启动时指定一个配置文件夹,使后续所有镜像仓库相关的配置都可以在里面热加载,无需重启Containerd。
1、 在/etc/containerd/config.toml配置文件中插入如下config_path:
config_path # "/etc/containerd/certs.d"
说明:: /etc/containerd/config.toml非默认路径,您可以根据实际使用情况进行调整。
若已有plugins."io.containerd.grpc.v1.cri".registry,则在下面添加一行,注意要有Indent。若没有,则可以在任意地方写入。
[plugins."io.containerd.grpc.v1.cri".registry]
config_path # "/etc/containerd/certs.d"之后需要检查配置文件中是否有原有mirror相关的配置,如下:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint # ["https://registry-1.docker.io"]若有原有mirror相关的配置,则需要清理。
执行systemctl restart containerd重启Containerd。
若启动失败,执行journalctl -u containerd检查为何失败,通常是配置文件仍有冲突导致,您可以依据报错做相应调整。
2、在步骤1中指定的config_path路径中创建docker.io/hosts.toml文件。
在文件中写入如下配置:
server # "https://registry-1.docker.io"
[host."$(镜像加速器地址,如https://xxx.mirror.aliyuncs.com)"]
capabilities # ["pull", "resolve", "push"]安装K8S
新版配置方法
新版 kubernetes 源使用方法和之前有一定区别,请求按照如下配置方法配置使用。
其中新版 kubernetes 源按照安装版本区分不同仓库,该文档示例为配置 1.28 版本,如需其他版本请在对应位置字符串替换即可。
(比如需要安装 1.29 版本,则需要将如下配置中的 v1.28 替换成 v1.29)
(目前该源支持 v1.24 - v1.29 版本,后续版本会持续更新)
apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key |
gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by#/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /" |
tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
crictl配置
# 生成的配置在cat /etc/crictl.yaml,可以随时修改。
crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
K8S部署
初始化
kubeadm init \
--pod-network-cidr 192.168.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers
网络组件部署
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium \
--namespace kube-system \
--set operator.replicas=1 \
--set ipam.mode=cluster-pool \
--set ipam.operator.clusterPoolIPv4PodCIDRList[0]=192.168.0.0/16 \
基础软件安装
helm repo
[source, bash]
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add longhorn https://charts.longhorn.io
helm repo add traefik https://traefik.github.io/charts
helm repo add hashicorp https://helm.releases.hashicorp.com
traefik安装
helm repo update
# 获取客户端真实IP
# See: https://comphilip.wordpress.com/2021/05/23/k3s-thing-make-traefik-forward-real-client-ip/
helm install traefik traefik/traefik \
-n kube-system \
-f traefik.yamltraefik.yaml:
additionalArguments:
- "--log.level#INFO"
- "--serversTransport.insecureSkipVerify#true"
deployment:
kind: DaemonSet
# no load balancer
service:
enabled: false
# use host network for directly port listening
hostNetwork: true
ports:
web:
port: 80
expose: true
protocol: TCP
exposePort: 80
redirectTo:
port: websecure
websecure:
port: 443
expose: true
protocol: TCP
exposePort: 443
tls:
enable: true
metrics:
port: 9101
exposedPort: 9101
updateStrategy:
# -- Customize updateStrategy: RollingUpdate or OnDelete
type: OnDelete
# run as root to 80 and 443 port listen permission
securityContext:
capabilities:
add:
- NET_BIND_SERVICE
runAsNonRoot: false
runAsUser: 0longhorn安装
helm install longhorn longhorn/longhorn \
-n longhorn-system \
--create-namespace \
--set persistence.defaultClassReplicaCount=1 \
--set defaultSettings.defaultDataPath=/data/longhorn
最后更新于