節點規劃
本次選用一個master節點,三個node節點來安裝k8s集群。
節點 | IP |
---|---|
M0 | 10.xx.xx.xx |
N0 | 10.xx.xx.xx |
N1 | 10.xx.xx.xx |
N2 | 10.xx.xx.xx |
集群啟動前的準備(請用root用戶執行)
節點準備工作(在每臺機器上執行)
包括修改主機名,關閉防火墻等操作。
k8s集群會識別主機名字,確保每個主機名設為不同值。
關閉防火墻是為了避免不必要的網絡問題。
# ${hostname}變量請替換成規劃的主機名,比如M0, N0, N1sudo hostnamectl set-hostname ${hostname}
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i -re '/^\s*SELINUX=/s/^/#/' -e '$i\\SELINUX=disabled' /etc/selinux/config
- 然后建立ssh的相互連接,方便后面傳文件什么的。可以使用
ssh-copy-id
命令,也可以自己添加認證。這個網上教程很多,自己搜一下
安裝docker(在每臺機器上執行)
yum install docker -y
systemctl enable docker && systemctl start docker
安裝kubeadm, kubelet, kubectl(每臺機器上執行)
- kubeadm: 快速創建k8s集群的工具
- kubelet: k8s的基礎組件,負責對pod和container的創建和管理,與k8s集群master建立聯系
- kubectl: k8s的客戶端工具,用來像集群發送命名
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOFyum install -y kubelet kubeadm kubectl
官網文檔上寫一些用戶在RHEL/Centos7系統上安裝時,由于iptables被繞過導致路由錯誤,需要在
sysctl的config文件中將net.bridge.bridge-nf-call-iptables設置為1.
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
啟動kubelet:
systemctl enable kubelet && systemctl start kubelet
至此,準備工作就做好了。目前每隔幾秒kubelet就會重啟,直到收到kubeadm的命令。
所以用systemctl status kubelet
看到kubelet沒有啟動是正常現象,可以多執行幾次查看,就會發現kubelet處于不斷停止和重啟的狀態.
使用kubeadm工具創建kubernetes集群
kubeadm是k8s官方提供的工具,可以簡單的創建一個安全可擴展的k8s集群。
在執行下面的操作之前,請確保前面的準備工作已經做完。特別是kubelet已經安裝和啟動,kubeadm已經安裝完成
啟動集群
-
啟動master
在master節點執行以下操作,并導出KUBECONFIG配置文件到環境變量:
記錄下kubeadm init的輸出信息,后面將會用到# --pod-network-cidr=192.168.0.0/1參數是為了后面啟動networ的Calico pod做準備kubeadm init --pod-network-cidr=192.168.0.0/16 export KUBECONFIG=/etc/kubernetes/admin.conf
-
安裝啟動一個network的pod,這里選用Calico.
在啟動任何pod之前,必須先啟動一個network的pod, 用于pod之間的通信kubectl apply -f https://docs.projectcalico.org/v2.6/getting- started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
-
添加node節點到master(在每臺node上執行以下命令)
當執行玩kubeadm init
后會輸出以下信息,直接復制執行就可以了kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert- hash sha256:<hash>
至此為止k8s集群就建好了,可以在master節點輸出
kubectl get nodes
查看 -
在非master節點管理集群(可選)
如果不執行這個操作,只能在master節點來管理集群。
把master節點的admin.conf配置文件復制到nodes節點當中去,就能在node節點來管理集群了。scp /etc/kubernetes/admin.conf root@10.5.30.82:/etc/kubernetes/ export KUBECONFIG=/etc/kubernetes/admin.conf
-
將API服務代理到localhost(可選)
這個很好理解,執行kubectl --kubeconfig proxy
命令,也是要使用admin.conf
的權限,直接復
制官方文檔:
if you want to connect to the API Server from outside the cluster you can use
kubectl proxy:scp root@<master ip>:/etc/kubernetes/admin.conf . kubectl --kubeconfig ./admin.conf proxy
You can now access the API Server locally at http://localhost:8001/api/v1
刪除集群
在我們安裝k8s集群時,可能會出現問題,需要重新安裝。
在我們重新執行安裝步驟之前,必須要先銷毀我們建立好的k8s集群,在master節點下執行以下命令。
# 先移除集群的node節點
kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
kubectl delete node <node name># 然后重置kubeadm狀態
kubeadm reset
我完全按照官方文檔安裝執行,沒有遇到問題. 如果你在安裝過程中遇到問題,請參考下面官方的故障排除文檔和安裝文檔。
故障排除:Troubleshooting Kubeadm
安裝文檔:Using kubeadm to create a cluster