由於牆的原因,國內要安裝 kubernetes 非常的麻煩,因此只要解決這個問題,就可以順利安裝 kubernetes 的 三個官方工具 kubelet、kubeadm、kubectl。
安裝環境:
OS:Ubuntu 18.04.1
-
添加相應的源
我在這里使用阿里源, 命令如下:
sudo vim /etc/apt/sources.list.d/kubernetes.list # 將下面的阿里源加入文件中 deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main # 也可以選擇中科大的源 deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
-
下載kubelet、kubeadm、kubectl
這里先運行一下
apt udpate
, 會報錯,原因是缺少相應的key,可以通過下面的命令添加(E084DAB9 為上面報錯的key后8位)gpg --keyserver keyserver.ubuntu.com --recv-keys E084DAB9 gpg --export --armor E084DAB9 | sudo apt-key add -
然后就可以正常下載了。
apt-get update && apt-get install -y kubelet kubeadm kubectl
-
關閉swap
如果不關閉kubernetes運行會出現錯誤, 即使安裝成功了,node重啟后也會出現kubernetes server運行錯誤。
#暫時關閉, sudo swapoff -a # 永久關閉 sudo vim /etc/fstab 注釋掉swap那一行就行 虛擬機最好把內存分配調整到2G以上,否則關掉swap會導致圖形界面難以進入。
-
獲取鏡像
由於官方鏡像地址被牆,所以我們需要首先獲取所需鏡像以及它們的版本。然后從國內阿里的鏡像站獲取。
kubeadm config images list
獲取鏡像列表后可以通過下面的腳本從阿里雲獲取:
images=( kube-apiserver:v1.13.4 kube-controller-manager:v1.13.4 kube-scheduler:v1.13.4 kube-proxy:v1.13.4 pause:3.1 etcd:3.2.24 coredns:1.2.6 ) for imageName in ${images[@]} ; do docker pull registry.aliyuncs.com/google_containers/$imageName docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.aliyuncs.com/google_containers/$imageName done
-
初始化環境
如果上面的鏡像都下載好了,這步就比較簡單了,直接運行下面的命令就行了
kubeadm init --apiserver-advertise-address 172.16.30.140 --pod-network-cidr=10.244.0.0/16
-
配置授權信息
根據init成功后的提示命令進行。
主要是為了保存相關的配置信息在用戶目錄下,這樣不用每次都輸入相關的認證信息。
類似下面的命令,具體以你個人的提示為准
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
保存添加Node的命令
類似於
kubeadm join 172.16.30.140:6443 --token aat409.plzb63oim93gjucq --discovery-token-ca-cert-hash sha256:5b906d68640eeddcd1381bf76dc0da5c522d71ceb89c547ac5a61fded064e54e
這條命令一定保存好,因為后期沒法重現的!!
-
刪除node的命令:
在master節點上執行:
kubectl drain node1-k8s --delete-local-data --force --ignore-daemonsets kubectl delete node node1-k8s
在節點上執行
kubeadm reset
-
添加網絡插件
上面安裝成功后如果通過查詢kube-system下Pod的運行情況,會放下和網絡相關的Pod都處於Pending的狀態,這是因為缺少相關的網絡插件,而網絡插件有很多個(以下任選一個),可以選擇自己需要的。
-
flannel
需要在kubeadm init 時設置 --pod-network-cidr=10.244.0.0/16
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
-
weave
sysctl net.bridge.bridge-nf-call-iptables=1 kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
-
calico
需要 kubeadm init 時設置 --pod-network-cidr=192.168.0.0/16
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
-
CNI bridge
mkdir -p /etc/cni/net.d cat >/etc/cni/net.d/10-mynet.conf <<-EOF { "cniVersion": "0.3.0", "name": "mynet", "type": "bridge", "bridge": "cni0", "isGateway": true, "ipMasq": true, "ipam": { "type": "host-local", "subnet": "10.244.0.0/16", "routes": [ {"dst": "0.0.0.0/0"} ] } } EOF cat >/etc/cni/net.d/99-loopback.conf <<-EOF { "cniVersion": "0.3.0", "type": "loopback" } EOF
-