阿里云的谷歌镜像仓库地址
registry.aliyuncs.com/google_containers
系统初始化
设置最大文件描述符 主机名
docker&Containerd安装
https://docs.docker.com/engine/install/centos/
kubeadm 部署
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
集群部署
# 生成完整的配置文件
containerd config default > /etc/containerd/config.toml
#修改 sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
sed -i 's#sandbox_image = "registry.k8s.io"#sandbox_image = "registry.aliyuncs.com/google_containers"#g' /etc/containerd/config.toml
systemctl restart containerd
# 初始化集群配置, 如果是多网卡需要修改--apiserver-advertise-address={提供服务的网卡IP},否则会读取默认网卡的IP导致后期集群通信时都通过默认网卡
kubeadm init --image-repository registry.aliyuncs.com/google_containers --control-plane-endpoint "192.168.235.150:6443" --upload-certs --apiserver-advertise-address=0.0.0.0 --service-cidr=192.168.0.0/17 --pod-network-cidr=192.168.128.0/17 | tee kubeadm-init.log
节点加入集群
# 根据输出的提示信息,执行下面的命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 根据提示执行指定的命令 加入为master节点 或者 普通node节点
kubeadm join 172.16.5.30:6443 --token hjqed5.0ueiyniog0pzls6p \
--discovery-token-ca-cert-hash sha256:c54d339dad7b57d7e1a2e9b5a0aded876b16a4e1eae4be1848f4d38864e804fa
# 安装网络插件
# 需要修改里面的Network为自定义的子网,如果有多个网卡要在-name: kube-flanael的args下指定--iface={网卡}
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
取消污点,允许master部署pod
kubectl taint nodes --all node-role.kubernetes.io/control-plane:NoSchedule-
禁止master部署pod
kubectl taint nodes k8s node-role.kubernetes.io/control-plane:NoSchedule kubectl taint nodes k8s kubernetes.io/hostname=k8s-master001
扩展
Node节点为多网卡时指定通信IP(kubectl get node -o wide中显示的INTERNAL-IP)
修改/etc/sysconfig/kubelet
(KUBELET_EXTRA_ARGS='--node-ip 10.0.0.3'
)
systemctl restart kubelet
kubectl get nodes -o wide
优化快速标记Node不可用状态
默认配置下每5s主动探测一次客户端,节点失联40s后标记为NotReady并标上unreachable污点,修改为3s的探测频率和持续15s标记为NotReady
官方参数说明:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager/
在/etc/kubernetes/manifests/kube-controller-manager.yaml的command下加入
--node-monitor-period=3s
--node-monitor-grace-period=15s
优化Node不可用时快速驱逐迁移pod
默认配置下,当节点down时需要300s后才会驱逐上面的pod(也就是需要40s标记为NotReady+300s=340s延迟后才会驱逐Pod),修改为5s
官方参数说明:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/
在/etc/kubernetes/manifests/kube-apiserver.yaml的command下添加
- --default-unreachable-toleration-seconds=5
- --default-not-ready-toleration-seconds=5
安装metric-server(kubectl top nod/pod数据)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Kubeadm 新节点加入集群
安装集群完成后日志中会默认输出一个具有24h有效期的token,用于其他节点加入集群,当token过期后可重新生成
- 1、查看是否存在有效token
kubeadm token list
- 2、创建新token并显示加入集群的命令 `kubeadm token create --print-join-command
- 3、普通节点加入集群(可直接复制第二步的输出)
kubeadm join 192.168.235.150:6443 --token jiw61t.e2bg... --discovery-token-ca-cert-hash sha256:af25823f238fee...
- 控制面节点加入集群(如果节点有多张网卡,如公网、外网网卡,需添加--apiserver-advertise-address="10.125.44.234"参数指定内网地址)
kubeadm join 192.168.235.150:6443 --token jiw61t.e2bg... --discovery-token-ca-cert-hash sha256:af25823f238fee... --control-plane --certificate-key cb8d63ceb40...