Kubernetes 安装
Kubernetes 从 1.24 开始不支持 Docker,而且需要加载更多的内核模块,当然就意味着更加成熟强大。
以 Debian 用 kubeadm 安装 1.24 版本为例子。
系统准备
安装依赖包
apt install -y ipset ipvsadm conntrack socat
加载内核模块
1.24 版本需要以下内核模块:
- ip_vs
- ip_vs_rr
- ip_vs_wrr
- ip_vs_sh
- nf_conntrack
- br_netfilter
- overlay
加载并且设置自动加载:
for i in ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack br_netfilter overlay; do modprobe $i && echo $i >> /etc/modules-load.d/modules.conf; done
系统配置
cat << EOF >> /etc/sysctl.conf
net.netfilter.nf_conntrack_max = 524288
net.nf_conntrack_max = 524288
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
kernel.panic_on_oops = 1
kernel.panic = 10
vm.overcommit_memory = 1
EOF
sysctl -p
安装配置
容器
apt install -y containerd
生成默认配置:
containerd config default > /etc/containerd/config.toml
更换镜像源:
sed -i 's|k8s.gcr.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml
改为 cgroup:
sed -Ei 's/(.*\.runc\.options\])/\1\n SystemdCgroup = true/g' /etc/containerd/config.toml
重启:
systemctl restart containerd
使用 ctr
操作 containerd。
kubeadm
更换下载源:
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
安装:
apt-get install -y kubelet kubeadm kubectl
安装后会有 crictl
操作 k8s 容器的命令,配置和 containerd 的信息:
crictl config runtime-endpoint unix:///run/containerd/containerd.sock
crictl config image-endpoint unix:///run/containerd/containerd.sock
生成默认配置并替换镜像源:
kubeadm config print init-defaults | sed 's|k8s.gcr.io|registry.aliyuncs.com/google_containers|g' > kube-default.yaml
根据新生的配置拉取镜像:
kubeadm config images pull --config kube-default.yaml
将当前 IP 写入配置,该 IP 需是一个固定入口:
sed -i 's/advertiseAddress: .*/advertiseAddress: '`hostname -I | awk '{print $1}'`'/g' kube-default.yaml
指定容器的网络段,这里用的是 flannel 的 IP 范围:
sed -i '/networking/a \ podSubnet: 10.244.0.0/16' kube-default.yaml
更改节点的名称:
sed -Ei "s/(\ +name: ).*/\1 `hostname`/g" kube-default.yaml
使用配置初始化:
kubeadm init --config kube-default.yaml
这时 coredns 会一直挂起,除非定义了网络,可以选择安装 flannel:
curl https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml > flannel.yaml
kubectl apply -f flannel.yaml
过程遇见问题,可以 journel -xeu kubelet
和 kubectl describe
来排查。