《寶可夢朱紫》7星太晶噴火龍活動說明
阿新 • • 發佈:2022-12-03
Kubernete叢集部署
1.大規模叢集的注意事項
推薦閱讀:
https://kubernetes.io/zh/docs/setup/best-practices/cluster-large/
2.部署Kubernetes叢集
2.1 宿主機與版本介紹
宿主機 | k8s版本 |
---|---|
centos7 | 1.19.9 |
2.2 K8S各節點環境準備
參考連結: https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 1)臨時關閉swap分割槽 swapoff -a && sysctl -w vm.swappiness=0 2)基於配置檔案關閉 sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab 3)允許iptable檢查橋接流量 cat <<EOF | tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system 4)配置docker源,以便提供私有倉庫 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo yum list docker-ce --showduplicates 5)安裝指定的docker版本 yum -y install docker-ce-18.09.9 docker-ce-cli-18.09.9 yum -y install bash-completion source /usr/share/bash-completion/bash_completion 6)配置docker優化 mkdir -pv /etc/docker && cat <<EOF | sudo tee /etc/docker/daemon.json { "insecure-registries": ["k8s151.oldboyedu.com:5000"], #指定master節點,這個5000埠是docker開放的registry的私有倉庫 "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF 7)配置docker開機自啟動 systemctl enable --now docker systemctl status docker 8)禁用防火牆 systemctl disable --now firewalld 9)禁用selinux sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config grep ^SELINUX= /etc/selinux/config 10)配置host解析 cat >> /etc/hosts <<'EOF' #新增域名解析 根據需要新增 master與worker 節點宿主機的域名 EOF cat /etc/hosts 11)在k8s151.oldboyedu.com節點啟用docker registry的私有倉庫 docker run -dp 5000:5000 --restart always --name oldboyedu-registry registry:2
3.所有節點安裝kubeadm,kubelet,kubectl
(1)配置軟體源 cat > /etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 EOF (2)檢視kubeadm的版本(將來你要安裝的K8S時請所有元件版本均保持一致!) yum -y list kubeadm --showduplicates | sort -r (3)安裝kubeadm,kubelet,kubectl軟體包 yum -y install kubeadm-1.19.9-0 kubelet-1.19.9-0 kubectl-1.19.9-0 (4)啟動kubelet服務(若服務啟動失敗時正常現象,其會自動重啟,因為缺失配置檔案,初始化集群后恢復!此步驟可跳過!) systemctl enable --now kubelet systemctl status kubelet #介紹軟體包命令的使用場景 kubeadm: 用來初始化叢集的指令。 kubelet: 在叢集中的每個節點上用來啟動Pod和容器等。 kubectl: 用來與叢集通訊的命令列工具。 kubeadm不能幫你安裝或者管理kubelet或kubectl,所以你需要確保它們與通過kubeadm安裝的控制平面(master)的版本相匹配。 如果不這樣做,則存在發生版本偏差的風險,可能會導致一些預料之外的錯誤和問題。 然而,控制平面與kubelet間的相差一個次要版本不一致是支援的,但kubelet的版本不可以超過"API SERVER"的版本。 例如,1.7.0版本的kubelet可以完全相容1.8.0版本的"API SERVER",反之則不可以。 參考連結: https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-linux/
4.初始化master節點
(1)使用kubeadm初始化master節點 kubeadm init --kubernetes-version=v1.19.9 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.254.0.0/16 (2)拷貝授權檔案,用於管理K8S叢集 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config (3)檢視叢集節點 kubectl get cs 結果顯示 Healthy
5.配置所有worker節點加入k8s叢集
(1)worker節點加入叢集(如上圖所示,下面的token及hash值需要根據您的叢集環境而發生改變喲~)
kubeadm join 10.0.0.151:6443 --token pg399v.wxo32zunx09ekd6s \
--discovery-token-ca-cert-hash sha256:3de653e36b5bbe3d34189607f4c11e63bcc675354dd2d47b81496ca96b68db60
(2)檢視叢集現有的worker節點
kubectl get no
結果顯示NotReady
6.初始化網路元件
官方的貌似有問題:(不推薦使用!)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-legacy.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
有效的連線:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
驗證flannel外掛是否部署成功:
kubectl get nodes
kubectl get pods -A -o wide | grep flannel
結果:顯示worker工作節點都在runing
參考連結:
https://kubernetes.io/zh/docs/concepts/cluster-administration/addons/
https://github.com/flannel-io/flannel/blob/master/Documentation/kubernetes.md
7.新增自動補全功能
echo "source <(kubectl completion bash)" >> ~/.bashrc && source ~/.bashrc
8.在安裝過程中的報錯
8.1 Unhealthy
[root@k8s154 ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
controller-manager Unhealthy Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
scheduler Unhealthy Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
etcd-0 Healthy {"health":"true"}
報錯原因
是/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml設定的預設埠是0導致的,解決方式是註釋掉對應的port即可
[root@k8s154 /etc/kubernetes/manifests]# pwd
/etc/kubernetes/manifests
[root@k8s154 /etc/kubernetes/manifests]# cat -n kube-controller-manager.yaml | grep port
27 #- --port=0
40 port: 10257
54 port: 10257
[root@k8s154 /etc/kubernetes/manifests]# cat -n kube-controller-manager.yaml | grep port=0
27 #- --port=0
[root@k8s154 /etc/kubernetes/manifests]# cat -n kube-scheduler.yaml | grep port=0
19 #- --port=0
[root@k8s154 /etc/kubernetes/manifests]#
#結果
[root@k8s154 /etc/kubernetes/manifests]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
8.2 flannel
溫馨提示: (所有的worker節點做此操作即可)
問題引出:
"network: failed to find plugin "flannel" in path [/opt/cni/bin]]..."這樣的報錯。
解決方案:
wget https://github.com/containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz
tar -xf cni-plugins-linux-amd64-v0.8.6.tgz ./flannel # 只需要解壓這一個檔案即可。
cp flannel /opt/cni/bin/