K8S集群的安裝(更新)
之前結合實際經(jīng)驗寫過一篇k8s集群安裝的文章,但是針對的是老版本的安裝方法,k8s的組件如今全部采用pod的方式運行,所以又重新安裝了
之前結合實際經(jīng)驗寫過一篇k8s集群安裝的文章,但是針對的是老版本的安裝方法,k8s的組件如今全部采用pod的方式運行,所以又重新安裝了本地的集群,現(xiàn)將集群的安裝過程整理記錄如下。
集群規(guī)劃如下
| 角色 | ip | 節(jié)點名稱 |
|---|---|---|
| master | 192.168.56.4 | v03 |
| node1 | 192.168.56.2 | v01 |
| node2 | 192.168.56.3 | v02 |
另外還有一臺節(jié)點v04作為docker的私庫,和集群的外掛磁盤所在節(jié)點。操作系統(tǒng)使用centos7。
首先集群的master節(jié)點要求必須2核以上,所以如果是使用vmware或者virtualbox,需要注意cpu的核數(shù)。
安裝前的準備
1. 關閉防火墻
2. 關閉selinux
3. 關閉swap,注釋掉 fstab中的 /dev/mapper/centos-swap
swapoff -anvi /etc/fstabn#/dev/mapper/centos-swap swap swap defaults 0 0
4. 修改sysctl的配置, 將net.bridge.bridge-nf-call-iptables設置為1
vi /etc/sysctl.confnnet.bridge.bridge-nf-call-ip6tables = 1nnet.bridge.bridge-nf-call-iptables = 1
安裝docker
確保所有節(jié)點都要安裝docker,因為現(xiàn)在k8s的所有組件都是基于pod的,所以即便是master節(jié)點,雖然它作為集群的管理節(jié)點不會運行我們自己的pod,但是k8s自己本身的組件,例如etcd,apiserver等都是運行在pod中,所以所有節(jié)點都需要安裝docker。
首先獲得docker的yum源,由于連接外網(wǎng)很不方便,而且速度慢,所以我們使用阿里云的yum源,包括后面下載docker鏡像,使用的也是阿里源的源。然后安裝docker-ce,并設置成開機啟動。
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.reponyum install docker-cen systemctl enable dockernsystemctl start docker
配置自己的私有倉庫(如果不適用私庫,可以略過此步)
由于docker私庫要求使用https,為了方便使用,我們使用insecure-registries。
編輯 /etc/docker/daemon.json, 加入下列內(nèi)容
{ "insecure-registries":["<ip>:5000"] }
其中ip為私庫ip,5000端口是默認的私庫端口,如果是自定義的,改成相應的端口。
安裝 kubelet、kubeadm 和 kubectl
首先設置yum源,添加阿里云為yum源
[kubernetes]nname=Kubernetesnbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64nenabled=1ngpgcheck=0nrepo_gpgcheck=0ngpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
然后安裝kubectl,kubeadm,kubelet,并設置kubelet的開機啟動
yum install kubectl kubeadm kubeletnsystemctl enable kubelet.service
kubectl是k8s的命令行工具
kubelet是用于啟動pod和容器等
kubeadm用于啟動集群,初始化集群
以上步驟需要在所有節(jié)點上執(zhí)行,下面開始分別安裝master和node節(jié)點。
安裝master節(jié)點
初始化master節(jié)點
在master節(jié)點上執(zhí)行以下命令進行初始化
kubeadm init --pod-network-cidr=10.244.0.0/16
--pod-network-cidr=10.244.0.0/16 是 k8s 的網(wǎng)絡插件所需要用到的配置信息,用來給 node 分配子網(wǎng)段。我們使用的的網(wǎng)絡插件是 flannel。
執(zhí)行初始化之前會先做一些檢查例如cpu核數(shù)等等。如果出現(xiàn)error,要先解決掉error然后重新運行init命令,檢查通過后,會開始運行kubeadm的初始化操作,會從官網(wǎng)下載很多image,由于國內(nèi)網(wǎng)絡連接官網(wǎng)很慢,很可能會下載失敗,所以我們可以使用阿里云的image,先下載下來,然后再給下載下來的鏡像重新打上官網(wǎng)的標簽,這樣再執(zhí)行初始化的時候就可以使用下載下來的本地鏡像。運行以下命令來下載鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.19.0ndocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.19.0 k8s.gcr.io/kube-apiserver:v1.19.0ndocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.19.0ndocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.19.0ndocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.19.0ndocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2ndocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.9-1ndocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0ndocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.19.0 k8s.gcr.io/kube-controller-manager:v1.19.0ndocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.19.0 k8s.gcr.io/kube-scheduler:v1.19.0ndocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.19.0 k8s.gcr.io/kube-proxy:v1.19.0ndocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2ndocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.9-1 k8s.gcr.io/etcd:3.4.9-1ndocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
kubeadm運行完成后,會提示其他節(jié)點加入集群的方法,截圖樣例如下(由于安裝時忘記截圖,在網(wǎng)上找了一個截圖的樣例),如果想要其他節(jié)點加入集群根據(jù)提示操作即可

master節(jié)點的配置
k8s不推薦使用root用戶操作,所以創(chuàng)建一個有root權限的用戶,然后賦予root權限
添加用戶k8s并設置密碼nuseradd k8snpasswd k8sn使用戶具有root權限nchmod 777 /etc/sudoersnvi /etc/sudoersnchmod 440 /etc/sudoers
切換至k8s賬戶,執(zhí)行以下命令,即安裝完kubeadm后提示的步驟
mkdir -p $HOME/.kubensudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/confignsudo chown $(id -u):$(id -g) $HOME/.kube/config
運行以下命令安裝pod網(wǎng)絡(安裝flannel),使pod可以相互通信
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
至此,master節(jié)點安裝完成
安裝Node節(jié)點
在node節(jié)點上執(zhí)行以下命令,即kubeadm安裝完提示的命令,加入集群
kubeadm join 10.0.2.5:6443 --token vc1pde.0f1zq9w3osvx8on7 --discovery-token-ca-cert-hash sha256:b4b4c0661363ff0cb95eb4d68bfce605da64a563a3e834827784c08fbdc7f8ba
安裝需要的鏡像
在每一個 node 節(jié)點上我們還需要下載 quay.io/coreos/flannel:v0.11.0-amd64、k8s.gcr.io/pause 和 k8s.gcr.io/kube-proxy 這三個鏡像,第一個可以直接下載,后兩個仍然采用先從國內(nèi)源下載然后打標簽的方式
docker pull Quayndocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2ndocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.19.0ndocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.19.0 k8s.gcr.io/kube-proxy:v1.19.0ndocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
可以在master節(jié)點上運行命令 kubectl get nodes查看集群節(jié)點的狀態(tài)。
至此node節(jié)點也安裝完成。
其他設置
這里主要是設置nfs,我們使用nfs來做volume的映射。找一臺vm做nfs的server,在集群的所有節(jié)點上安裝nfs服務。并設置開機啟動
yum install rpcbind nfs-utilsnsystemctl enable rpcbind.servicenservice rpcbind start
在server節(jié)點做如下配置
# cat /etc/exportsn/data/k8s/ 192.168.56.0/24(sync,rw,no_root_squash)
/data/k8s/ 是掛載的目錄
192.168.56.0/24 是允許掛載的客戶端ip的所在網(wǎng)段
synct同時將數(shù)據(jù)寫入到內(nèi)存與硬盤中,保證不丟失數(shù)據(jù)
rwt讀寫
no_root_squasht當NFS客戶端以root管理員訪問時,映射為NFS服務器的root管理員
在客戶端使用showmount -e 192.168.56.5查看是否可以正常掛載,顯示如下證明可以正常掛載
# showmount -e 192.168.56.5nExport list for 192.168.56.5:n/data/k8s 192.168.56.0/24
至此k8s的集群的安裝已經(jīng)完成。








