本次選用一個master節點,三個node節點來安裝k8s集羣。 node
節點 | IP |
---|---|
M0 | 10.xx.xx.xx |
N0 | 10.xx.xx.xx |
N1 | 10.xx.xx.xx |
N2 | 10.xx.xx.xx |
包括修改主機名,關閉防火牆等操做。
k8s集羣會識別主機名字,確保每一個主機名設爲不一樣值。
關閉防火牆是爲了不沒必要要的網絡問題。 linux
# ${hostname}變量請替換成規劃的主機名,好比M0, N0, N1 sudo 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-copy-id
命令,也能夠本身添加認證。這個網上教程不少,本身搜一下 yum install docker -y systemctl enable docker && systemctl start docker
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 EOF yum install -y kubelet kubeadm kubectl
官網文檔上寫一些用戶在RHEL/Centos7系統上安裝時,因爲iptables被繞過致使路由錯誤,須要在
sysctl的config文件中將net.bridge.bridge-nf-call-iptables設置爲1.docker
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:api
systemctl enable kubelet && systemctl start kubelet
至此,準備工做就作好了。目前每隔幾秒kubelet就會重啓,直到收到kubeadm的命令。
因此用systemctl status kubelet
看到kubelet沒有啓動是正常現象,能夠多執行幾回查看,就會發現kubelet處於不斷中止和重啓的狀態.安全
kubeadm是k8s官方提供的工具,能夠簡單的建立一個安全可擴展的k8s集羣。
在執行下面的操做以前,請確保前面的準備工做已經作完。特別是kubelet已經安裝和啓動,kubeadm已經安裝完成網絡
啓動master
在master節點執行如下操做,並導出KUBECONFIG配置文件到環境變量:
記錄下kubeadm init的輸出信息,後面將會用到app
# --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之間的通訊 ssh
kubectl apply -f https://docs.projectcalico.org/v2.6/getting- started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
添加node節點到master(在每臺node上執行如下命令)
當執行玩kubeadm init
後會輸出如下信息,直接複製執行就能夠了 ide
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