阿里云的谷歌镜像仓库地址

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...
Copyright © 运维知识库 all right reserved,powered by Gitbook文件修订时间: 2024-05-21 15:07:35

results matching ""

    No results matching ""