
如果kubernetes的版本為1.8-1.11,docker版本必須為1.11.2-1.13.1和docker-ce版本為17.03.x
如果kubernetes的版本從1.12開始,docker版本必須為17.06/17.09/18.06
1 環(huán)境準(zhǔn)備
三臺(tái)centos服務(wù)器
master 192.168.32.130
node1 192.168.32.131
node2 192.168.32.132
node3 192.168.32.133關(guān)閉selinux和firewalld
setenforce=0
修改 /etc/selinux/config 中的 SELINUX=disabled
systemctl stop firewalld
systemctl disable firewalld
- 這里使用yum安裝,需要配置好yum源(這里使用aliyun)
分別在三臺(tái)服務(wù)器安裝相關(guān)源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1添加docker-ce的yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
按照官方文檔添加k8s的yum源
- 打開橋接
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
2 環(huán)境部署
- 安裝相關(guān)程序執(zhí)行
- master節(jié)點(diǎn)
yum install -y docker-ce kubelet kubeadm kubectl
- node節(jié)點(diǎn)(node節(jié)點(diǎn)不操作可以不安裝kubectl)
yum install -y docker-ce kubelet kubeadm
- 啟動(dòng)docker并設(shè)置開機(jī)啟動(dòng)(所有節(jié)點(diǎn))
systemctl start docker
systemctl enable docker
- 設(shè)置kubelet開機(jī)啟動(dòng)
systemctl enable kubelet
- 初始化主節(jié)點(diǎn)
kubeadm init --kubernetes-version=v1.11 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=swap
這里設(shè)置了初始化的版本,pod的網(wǎng)段,service的網(wǎng)段,可以依據(jù)kubeadm init --help自行修改。同時(shí)忽略的swap的報(bào)錯(cuò),在初始化的過程中報(bào)錯(cuò)可能會(huì)中斷初始化,可以根據(jù)實(shí)際情況依據(jù)在--ignore-preflight-errors=swap后添加忽略信息忽略。
初始化成功后會(huì)生成提示信息

按成功提示執(zhí)行命令(最后一條是當(dāng)前root用戶可不執(zhí)行)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
保存kubeadm jion信息用于node節(jié)點(diǎn)的加入
可用 kubectl get cs查看健康情況
可用kubectl get nodes查看節(jié)點(diǎn)情況
- 主節(jié)點(diǎn)安裝配置flannel
Flannel是CoreOS團(tuán)隊(duì)針對(duì)Kubernetes設(shè)計(jì)的一個(gè)Overlay網(wǎng)絡(luò)規(guī)劃服務(wù),簡(jiǎn)單來說,它的功能是讓集群中的不同節(jié)點(diǎn)主機(jī)創(chuàng)建的Docker容器都具有全集群唯一的虛擬IP地址。項(xiàng)目托管于github上地址https://github.com/coreos/flannel
Kubernetes v1.7以上可直接使用yml安裝
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
安裝完成后可使用kubectl get pods -n kube-system查看各系統(tǒng)名稱空間組件READY和STATUS情況
- 加入node節(jié)點(diǎn)
使用master節(jié)點(diǎn)初始化時(shí)候產(chǎn)生的kubeadm join命令進(jìn)行node節(jié)點(diǎn)的加入,可以使用--ignore-preflight-errors=swap添加忽略
安裝完成后可使用kubectl get nodes查看各節(jié)點(diǎn)加入情況
可使用kubectl get pods -n kube-system -o wide查看各節(jié)點(diǎn)系統(tǒng)名稱空間組件READY和STATUS情況
3. 坑點(diǎn)
- 關(guān)于swap的忽略
如果初始化是在--ignore-preflight-errors=swap上設(shè)置了依然報(bào)錯(cuò)則需要
vim /etc/sysconfig/kubelet
添加KUBELET_EXTRA_ARGS="--fail-swap-on=false"
- 關(guān)于鏡像無法加載
在初始化過程中master節(jié)點(diǎn)會(huì)下載kube-proxy,kube-controller-manager,kube-apiserver,kube-scheduler,coredns,etcd,pause等一些鏡像,現(xiàn)階段網(wǎng)絡(luò)可能訪問不到,可在報(bào)錯(cuò)信息中或者/var/log/message中查看鏡像,將文件中鏡像地址進(jìn)行內(nèi)容替換即可:
將k8s.gcr.io替換為
registry.cn-hangzhou.aliyuncs.com/google_containers
registry.aliyuncs.com/google_containers
mirrorgooglecontainers
以上三選一
使用docker pull將下載下來
然后再使用 docekr tag將鏡像打上需要的k8s.gcr.io標(biāo)簽的鏡像
node節(jié)點(diǎn)需要的鏡像可以通過docker save將master節(jié)點(diǎn)的鏡像保存拷貝到node節(jié)點(diǎn)之后通過docker load -i加載
或者
在kubeadm init時(shí)加上--image-repository=registry.aliyuncs.com/google_containers
也就是上面的三個(gè)鏡像倉(cāng)庫(kù)地址中的一個(gè)都行
- K8s集群初始化成功后,kubectl get nodes 查看節(jié)點(diǎn)信息時(shí)報(bào)錯(cuò)
報(bào)錯(cuò)信息:The connection to the server localhost:8080 was refused - did you specify the right host or port?
解決方法:
執(zhí)行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
再次查看節(jié)點(diǎn)信息即正常
4.解決GitHub的raw.githubusercontent.com無法連接問題
修改hosts
sudo vi /etc/hosts
添加以下內(nèi)容保存即可 (IP地址查詢后相應(yīng)修改,可以ping不同IP的延時(shí) 選擇最佳IP地址)
# GitHub Start
52.74.223.119 github.com
192.30.253.119 gist.github.com
54.169.195.247 api.github.com
185.199.111.153 assets-cdn.github.com
151.101.76.133 raw.githubusercontent.com
151.101.108.133 user-images.githubusercontent.com
151.101.76.133 gist.githubusercontent.com
151.101.76.133 cloud.githubusercontent.com
151.101.76.133 camo.githubusercontent.com
151.101.76.133 avatars0.githubusercontent.com
151.101.76.133 avatars1.githubusercontent.com
151.101.76.133 avatars2.githubusercontent.com
151.101.76.133 avatars3.githubusercontent.com
151.101.76.133 avatars4.githubusercontent.com
151.101.76.133 avatars5.githubusercontent.com
151.101.76.133 avatars6.githubusercontent.com
151.101.76.133 avatars7.githubusercontent.com
151.101.76.133 avatars8.githubusercontent.com
# GitHub End
- 沒有記token如何加入K8S集群
a. 生成一條永久有效的token kubeadm token create --ttl 0
查看token kubeadm token list
b. 獲取ca證書sha256編碼hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
c. node節(jié)點(diǎn)加入
kubeadm join 192.168.28.128:6443 --token <token> --discovery-token-ca-cert-hash sha256:<sha256>
- 其它問題
其它問題如果看不出報(bào)錯(cuò)的都可以在/var/log/message查看問題
一些不可達(dá)的問題和解析問題基本都是跟/etc/hosts解析相關(guān),需要添加解析信息
同時(shí)跟一些忽略相關(guān)的可以通過在--ignore-preflight-errors=上添加忽略信息
如果顯示初始化完成可以使用kubeadm reset重置初始化信息