首先,咱們須要先關閉swap和防火牆,不然在安裝Kubernetes時會致使不成功:node
# 臨時關閉 swapoff -a # 編輯/etc/fstab,註釋掉包含swap的那一行便可,重啓後可永久關閉 ufw disable
sudo echo "deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
而後更新下:docker
sudo apt update
若是遇到如下問題:
能夠記下提示的PUBKEY的最後8位,這裏是BA07F4FB,而後執行:ubuntu
gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB gpg --export --armor BA07F4FB | sudo apt-key add - sudo apt-get update
sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl #確保不會被自動更新
須要確保kubelet的cgroup drive在docker的一致。
分別能夠經過如下命令查看:api
docker info | grep -i cgroup cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
若顯示不同,則添加或修改Environment="KUBELET_CGROUP_ARGS=--cgroup-dirver=cgroupfs"
:網絡
systemctl daemon-reload systemctl restart kubelet
systemctl enable kubelet && systemctl start kubelet
在/etc/apt/sources.list
中添加阿里源:app
deb http://mirrors.aliyun.com/ubuntu/ xenial main deb-src http://mirrors.aliyun.com/ubuntu/ xenial main deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
sudo apt update
更新下源。google
首先使用kubeadm config images list
顯示咱們須要下載的鏡像。
uploading-image-472461.png
3d
而後從mirrorgooglecontainers上把這些鏡像都拉下來,以避免在初始化的時候從k8s.gcr.io拉取:rest
docker pull mirrorgooglecontainers/kube-apiserver:v1.14.2 docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2 docker pull mirrorgooglecontainers/kube-scheduler:v1.14.2 docker pull mirrorgooglecontainers/kube-proxy:v1.14.2 docker pull mirrorgooglecontainers/pause:3.1 docker pull mirrorgooglecontainers/etcd:3.3.10 docker pull coredns/coredns:1.3.1
具體版本請自行修改。code
而後修改tag成k8s執行init檢查的鏡像:
docker tag mirrorgooglecontainers/kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2 docker tag mirrorgooglecontainers/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2 docker tag mirrorgooglecontainers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2 docker tag mirrorgooglecontainers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2 docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1 docker tag mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10 docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
注意,至此基礎的組件都安裝完成,接下來要根據是master節點仍是普通node節點來分別配置。
在master節點上運行:
kubeadm init --pod-network-cidr=10.0.0.0/24 --kubernetes-version=v1.14.2 --apiserver-advertise-address=10.0.2.15
注意:
pod-network-cidr: 選項--pod-network-cidr=10.0.0.0/24表示集羣將使用網絡的子網範圍; 選項--kubernetes-version=v1.14.2指定K8S版本,必須和前面導入的鏡像一致。 選項--apiserver-advertise-address表示綁定的網卡IP,這裏是指定所用網絡的網卡。 若執行kubeadm init出錯或強制終止,則再須要執行該命令時,須要先執行kubeadm reset重置。
執行成功後,它提示還須要執行:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
此外最後還會提示其餘節點加入集羣時的命令:
kubeadm join 10.0.2.15:6443 --token zuhiop.bmxq2jofv1j68o9o \ --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb
不過須要注意的是這裏的token值24小時後會失效,所以,當之後還想加入節點時,能夠先用kubeadm token list
命令查看當前的token表,並在master節點上執行openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
來查看hash。
此時咱們查看網絡狀態kubectl get pod -n kube-system
,能夠發現都處於Pending阻塞狀態,此時,咱們須要配置網絡,直接使用Calico,即執行:
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
(注意這裏也是有版本號的,若是不是很清楚是多少,能夠直接訪問官網獲取最新的進行嘗試:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)
過段時間,再執行kubectl get pod -n kube-system
就會發現都處於running狀態了。
最後將master設爲工做節點:
kubectl taint nodes --all node-role.kubernetes.io/master-
執行成功時會顯示
node/xl-virtualbox untainted
對於mater至此配置成功,可使用kubectl get nodes
命令查看節點狀態。固然目前只有一個master節點。
對於普通的node節點,只需執行:
kubeadm join 10.0.2.15:6443 --token zuhiop.bmxq2jofv1j68o9o \ --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb
就能夠了。
若是此時在master節點上使用kubectl get nodes
查看節點的狀態時'NotReady',請在對應主機上重啓docker服務便可:
systemctl restart docker
最後,能夠看到兩個節點都能正常工做了:
PS:
爲了每臺節點顯示名稱不同,最好是給每一個節點設置不一樣的hostname,能夠經過如下命令修改:
hostnamectl set-hostname new-name