本篇文章是基于kubernetes—CentOS7安裝kubernetes1.11.2圖文完整版這篇文章而寫,主要是為了記錄安裝成功的過(guò)程加上自己的一些理解,為了避免以后遺忘。
設(shè)置主機(jī)名
這樣就可以將主機(jī)名設(shè)置成自己想要的名字,方便查看。我把master節(jié)點(diǎn)設(shè)置為k8s-master,從節(jié)點(diǎn)設(shè)置為k8s-node1
分別在兩臺(tái)機(jī)器上進(jìn)行設(shè)置,下面用master節(jié)點(diǎn)來(lái)舉例
hostname k8s-master
編輯對(duì)應(yīng)關(guān)系,首先用ifconfig命令來(lái)獲取ip地址,然后使用命令
vi /etc/hosts
輸入
192.168.194.135 k8s-master
關(guān)閉防火墻
CentOS Linux7中默認(rèn)開(kāi)啟了防火墻,在一個(gè)安全的內(nèi)部網(wǎng)絡(luò)環(huán)境中可以關(guān)閉防火墻服務(wù)
sudo systemctl stop firewalld.service #停止firewall
sudo systemctl disable firewalld.service #禁止firewall開(kāi)機(jī)啟動(dòng)
sudo firewall-cmd --state #查看防火墻狀態(tài)
這時(shí)可以看到防火墻的狀態(tài)是not running
在主機(jī)上禁用SELinux
讓容器可以讀取主機(jī)文件系統(tǒng)
sudo setenforce 0
或者也可以用修改系統(tǒng)文件的方式修改
sudo vi /etc/selinux/config
#SELINUX修改為disabled
SELINUX=disabled
創(chuàng)建/etc/sysctl.d/k8s.conf文件
sudo vi /etc/sysctl.d/k8s.conf
添加如下內(nèi)容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
使修改生效,執(zhí)行
sudo sysctl -p /etc/sysctl.d/k8s.conf
關(guān)閉swap
swapoff -a
配置yum源
因?yàn)橛胟8s官網(wǎng)給的yum源國(guó)內(nèi)訪問(wèn)不了,所以用的是阿里云的yum倉(cāng)庫(kù)鏡像
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安裝kubeadm和相關(guān)工具
yum install -y docker kubelet kubeadm kubectl kubernetes-cni
如果本來(lái)就已經(jīng)安裝了Docker,那取消命令中的docker。

安裝成功了后,啟動(dòng)Docker服務(wù)和kubelet服務(wù),并且設(shè)置成開(kāi)機(jī)自動(dòng)啟動(dòng)
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet

下載kubernetes相關(guān)鏡像
kubeadm默認(rèn)從gcr.io中下載kubernetes相關(guān)鏡像,但是我們無(wú)法訪問(wèn)gcr.io的網(wǎng)絡(luò)環(huán)境,所以采用了Daocloud來(lái)獲取鏡像加速服務(wù)
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
該腳本可以將 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中 ,然后重啟docker來(lái)使得docker生效
systemctl restart docker #重啟docker
這時(shí)可能會(huì)出現(xiàn)重啟失敗的錯(cuò)誤,需要去檢查配置文件 /etc/docker/daemon.json,使得文件中的內(nèi)容為:

手動(dòng)下載相關(guān)鏡像
接下來(lái)去手動(dòng)下載kubernetes相關(guān)鏡像,下載地址是https://hub.docker.com/r/warrior
docker pull mirrorgooglecontainers/kube-apiserver:v1.13.2
docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.2
docker pull mirrorgooglecontainers/kube-scheduler:v1.13.2
docker pull mirrorgooglecontainers/kube-proxy:v1.13.2
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.2.24
docker pull coredns/coredns:1.2.6
修改鏡像名,以供kubeadm使用
docker tag docker.io/mirrorgooglecontainers/kube-proxy:v1.13.2 k8s.gcr.io/kube-proxy:v1.13.2
docker tag docker.io/mirrorgooglecontainers/kube-scheduler:v1.13.2 k8s.gcr.io/kube-scheduler:v1.13.2
docker tag docker.io/mirrorgooglecontainers/kube-apiserver:v1.13.2 k8s.gcr.io/kube-apiserver:v1.13.2
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager:v1.13.2 k8s.gcr.io/kube-controller-manager:v1.13.2
docker tag docker.io/mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag docker.io/mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag docker.io/coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
運(yùn)行kubeadm init安裝master
kubeadm init --kubernetes-version = 1.13.2
運(yùn)行

安裝Node,加入集群
安裝kubeadm和相關(guān)工具
此部分內(nèi)容和上文中對(duì)應(yīng)內(nèi)容一致
加入集群
kubeadm join 192.168.194.128:6443 --token 7orz4v.q5landhrmjc844ep --discovery-token-ca-cert-hash sha256:9c7f5c99293d7978a2ce9e0d7900715e0b9241526f69da237b74cad419470864
- 這上面的token及ip地址均為master節(jié)點(diǎn)安裝成功界面中的提示。
- 獲取ca證書(shū)sha256編碼hash值,在master節(jié)點(diǎn)上輸入命令
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
輸入后可能會(huì)提示你swap沒(méi)有關(guān)閉,輸入命令來(lái)關(guān)閉就行,命令如下
swapoff -a
再次join,發(fā)現(xiàn)加入成功

安裝網(wǎng)絡(luò)插件
添加節(jié)點(diǎn)后,通過(guò)kubectl get nodes命令,可能會(huì)發(fā)現(xiàn)報(bào)錯(cuò):The connection to the server localhost:8080 was refused - did you specify the right host or port?
輸入命令
export KUBECONFIG=/etc/kubernetes/admin.conf
解決了這個(gè)問(wèn)題,但是Kubernetes提示Master節(jié)點(diǎn)為NotReady的狀態(tài),所以要安裝網(wǎng)絡(luò)插件
這里選擇的flannel插件
mkdir -p ~/k8s/
cd ~/k8s
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
這時(shí)候使用kubectl get pod –all-namespaces -o wide確保所有的Pod都處于Running狀態(tài)。
這里出了一個(gè)錯(cuò)誤,kube-flannel-ds-amd64節(jié)點(diǎn)出現(xiàn)了init錯(cuò)誤,使用
yum install flannel
進(jìn)行安裝flannel,問(wèn)題得到的解決,與此同時(shí)可以看到master節(jié)點(diǎn)已經(jīng)是ready狀態(tài)了
手動(dòng)配置副節(jié)點(diǎn)鏡像

這時(shí)候發(fā)現(xiàn)副節(jié)點(diǎn)還是notready的狀態(tài),查看pod的狀態(tài),發(fā)現(xiàn)卡在ContainerCreating狀態(tài)和Init:0/1,這是因?yàn)楦惫?jié)點(diǎn)鏡像沒(méi)有獲取到的原因,按照上文手動(dòng)安裝鏡像的內(nèi)容重新進(jìn)行安裝。而flannel則是在master節(jié)點(diǎn)輸入docker image命令查看鏡像版本,然后手動(dòng)下載就可以。
成功
準(zhǔn)備好鏡像之后發(fā)現(xiàn)成功:
