k8s集群安裝

集群架構(gòu)圖

image.png
image.png

相關(guān)概念

Cluster:計算、存儲、網(wǎng)絡(luò)資源的總和。Kubernetes的各種基于容器的應(yīng)用都是運行在這些資源上的。

Master:Kubernetes的大腦,負(fù)責(zé)調(diào)度各種計算資源。Master可以是物理機或虛擬機,多個Master可以同時運行,并實現(xiàn)HA。Master節(jié)點上運行的組件可以參見本文架構(gòu)圖。

Node:負(fù)責(zé)運行容器的應(yīng)用,由Master管理,可以是物理機或虛擬機。

Pod:Kubernetes的最小工作單元,也就是說Kubernetes管理的是Pod而不是容器。每個Pod包括一個或多個容器。Pod中的容器會被作為一個整體被Master調(diào)度到另一個Node上。

Controller:Kubernetes通常不會直接創(chuàng)建Pod,而是通過Controller來管理Pod的。Controller中定義了容器中的一些部署特性。

Service:外界訪問一組特定的Pod方式,有自己的IP和端口,Service為Pod提供了負(fù)載均衡。

Namespace:Namespace可以將一個物理的Cluster邏輯上劃分為多個虛擬Cluster,每個Cluster就是一個Namespace,不同的Namespace里的資源完全是隔離的。創(chuàng)建資源時,如果不指定,將會被放到default這個默認(rèn)的Namespace中。

安裝前提

提示:要在每個節(jié)點進(jìn)行以下操作

修改主機命名【可操作】

[root@k8s-master ~]# vim /etc/hosts

192.168.148.10 k8s-master
192.168.148.11 k8s-node01
192.168.148.12 k8s-node02

關(guān)閉并禁用防火墻

[root@k8s-master ~]# systemctl stop firewalld
[root@k8s-master ~]# systemctl disable firewalld

網(wǎng)絡(luò)橋接設(shè)置

[root@k8s-master ~]# echo 'net.bridge.bridge-nf-call-iptables = 1'>>/etc/sysctl.conf
[root@k8s-master ~]# echo 'net.bridge.bridge-nf-call-ip6tables = 1'>>/etc/sysctl.conf

[root@k8s-master ~]# sysctl -p
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

準(zhǔn)備yum源

[root@k8s-master ~]# cd /etc/yum.repos.d/

# docker源
[root@k8s-master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# k8s源
[root@k8s-master yum.repos.d]# vim k8s.repo
[k8s]
name=k8s repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
# 保存退出

[root@k8s-master yum.repos.d]# yum repolist
[root@k8s-master yum.repos.d]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 
[root@k8s-master yum.repos.d]# rpm --import yum-key.gpg
[root@k8s-master yum.repos.d]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
[root@k8s-master yum.repos.d]# rpm --import rpm-package-key.gpg

查看安裝版本列表

[root@k8s-master yum.repos.d]# yum list docker-ce --showduplicates
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.ustc.edu.cn
 * extras: centos.ustc.edu.cn
 * updates: centos.ustc.edu.cn
已安裝的軟件包
docker-ce.x86_64    18.06.0.ce-3.el7           @docker-ce-stable
可安裝的軟件包
docker-ce.x86_64    17.03.0.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    17.03.1.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    17.03.2.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    17.03.3.ce-1.el7           docker-ce-stable 
docker-ce.x86_64    17.06.0.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    17.06.1.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    17.06.2.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    17.09.0.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    17.09.1.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    17.12.0.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    17.12.1.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    18.03.0.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    18.03.1.ce-1.el7.centos    docker-ce-stable 
docker-ce.x86_64    18.06.0.ce-3.el7           docker-ce-stable 
docker-ce.x86_64    18.06.1.ce-3.el7           docker-ce-stable 
docker-ce.x86_64    3:18.09.0-3.el7            docker-ce-stable 

在mster節(jié)點安裝軟件

這里選擇安裝docker-ce-18.06,kubelet、 kubeadm、 kubectl 1.12.1版本

yum -y install docker-ce-18.06.0.ce-3.el7 kubelet-1.12.1-0 kubeadm-1.12.1-0 kubectl-1.12.1-0

等待安裝完成...

查看安裝清單

[root@k8s-master yum.repos.d]# rpm -ql kubelet
/etc/kubernetes/manifests #清單目錄
/etc/sysconfig/kubelet #配置文件
/etc/systemd/system/kubelet.service
/usr/bin/kubelet #主程序

k8s相關(guān)docker鏡像獲取

首先需要啟動docker程序

systemctl daemon-reload #修改docker相關(guān)配置文件時,需要重新加載配置信息
systemctl start docker  #啟動docker程序
systemctl enable docker  #并設(shè)置開機自動啟動
systemctl enable kubelet  #并設(shè)置開機自動啟動

由于google http://www.ik8s.io:10080 鏡像網(wǎng)址無法訪問,相關(guān)鏡像無法下載,可到阿里相關(guān)用戶公開鏡像倉庫下載(我已準(zhǔn)備好v1.12.1相關(guān)版本鏡像):

docker pull registry.cn-beijing.aliyuncs.com/yzxd/kube-apiserver:v1.12.1
docker pull registry.cn-beijing.aliyuncs.com/yzxd/kube-controller-manager:v1.12.1
docker pull registry.cn-beijing.aliyuncs.com/yzxd/kube-scheduler:v1.12.1
docker pull registry.cn-beijing.aliyuncs.com/yzxd/kube-proxy:v1.12.1
docker pull registry.cn-beijing.aliyuncs.com/yzxd/etcd:3.2.24
docker pull registry.cn-beijing.aliyuncs.com/yzxd/pause:3.1
docker pull registry.cn-beijing.aliyuncs.com/yzxd/coredns:1.2.2
docker pull registry.cn-beijing.aliyuncs.com/yzxd/flannel:v0.10.0-amd64

# 下載完成后,查看鏡像
[root@k8s-master ~]# docker images
REPOSITORY                                                      TAG                 IMAGE ID            CREATED             SIZE
registry.cn-beijing.aliyuncs.com/yzxd/kube-proxy                v1.12.1             61afff57f010        2 months ago        96.6MB
registry.cn-beijing.aliyuncs.com/yzxd/kube-apiserver            v1.12.1             dcb029b5e3ad        2 months ago        194MB
registry.cn-beijing.aliyuncs.com/yzxd/kube-controller-manager   v1.12.1             aa2dd57c7329        2 months ago        164MB
registry.cn-beijing.aliyuncs.com/yzxd/kube-scheduler            v1.12.1             d773ad20fd80        2 months ago        58.3MB
registry.cn-beijing.aliyuncs.com/yzxd/etcd                      3.2.24              3cab8e1b9802        2 months ago        220MB
registry.cn-beijing.aliyuncs.com/yzxd/coredns                   1.2.2               367cdc8433a4        3 months ago        39.2MB
registry.cn-beijing.aliyuncs.com/yzxd/flannel                   v0.10.0-amd64       f0fad859c909        10 months ago       44.6MB
registry.cn-beijing.aliyuncs.com/yzxd/pause                     3.1                 da86e6ba6ca1        11 months ago       742kB

# 由于k8s使用鏡像名稱與下載的鏡像名不同,需要進(jìn)行鏡像名稱改動
docker tag registry.cn-beijing.aliyuncs.com/yzxd/pause:3.1 k8s.gcr.io/pause:3.1
docker tag registry.cn-beijing.aliyuncs.com/yzxd/coredns:1.2.2 k8s.gcr.io/coredns:1.2.2
docker tag registry.cn-beijing.aliyuncs.com/yzxd/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag registry.cn-beijing.aliyuncs.com/yzxd/kube-scheduler:v1.12.1 k8s.gcr.io/kube-scheduler:v1.12.1
docker tag registry.cn-beijing.aliyuncs.com/yzxd/kube-controller-manager:v1.12.1 k8s.gcr.io/kube-controller-manager:v1.12.1
docker tag registry.cn-beijing.aliyuncs.com/yzxd/kube-apiserver:v1.12.1 k8s.gcr.io/kube-apiserver:v1.12.1
docker tag registry.cn-beijing.aliyuncs.com/yzxd/kube-proxy:v1.12.1 k8s.gcr.io/kube-proxy:v1.12.1
docker tag registry.cn-beijing.aliyuncs.com/yzxd/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64

# 修改后的鏡像列表
[root@k8s-master ~]# docker images
REPOSITORY                                                      TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                                           v1.12.1             61afff57f010        2 months ago        96.6MB
registry.cn-beijing.aliyuncs.com/yzxd/kube-proxy                v1.12.1             61afff57f010        2 months ago        96.6MB
k8s.gcr.io/kube-scheduler                                       v1.12.1             d773ad20fd80        2 months ago        58.3MB
registry.cn-beijing.aliyuncs.com/yzxd/kube-scheduler            v1.12.1             d773ad20fd80        2 months ago        58.3MB
k8s.gcr.io/kube-apiserver                                       v1.12.1             dcb029b5e3ad        2 months ago        194MB
registry.cn-beijing.aliyuncs.com/yzxd/kube-apiserver            v1.12.1             dcb029b5e3ad        2 months ago        194MB
k8s.gcr.io/kube-controller-manager                              v1.12.1             aa2dd57c7329        2 months ago        164MB
registry.cn-beijing.aliyuncs.com/yzxd/kube-controller-manager   v1.12.1             aa2dd57c7329        2 months ago        164MB
k8s.gcr.io/etcd                                                 3.2.24              3cab8e1b9802        2 months ago        220MB
registry.cn-beijing.aliyuncs.com/yzxd/etcd                      3.2.24              3cab8e1b9802        2 months ago        220MB
k8s.gcr.io/coredns                                              1.2.2               367cdc8433a4        3 months ago        39.2MB
registry.cn-beijing.aliyuncs.com/yzxd/coredns                   1.2.2               367cdc8433a4        3 months ago        39.2MB
quay.io/coreos/flannel                                          v0.10.0-amd64       f0fad859c909        10 months ago       44.6MB
registry.cn-beijing.aliyuncs.com/yzxd/flannel                   v0.10.0-amd64       f0fad859c909        10 months ago       44.6MB
k8s.gcr.io/pause                                                3.1                 da86e6ba6ca1        11 months ago       742kB
registry.cn-beijing.aliyuncs.com/yzxd/pause                     3.1                 da86e6ba6ca1        11 months ago       742kB

# 刪除下載的鏡像
docker rmi registry.cn-beijing.aliyuncs.com/yzxd/kube-apiserver:v1.12.1
docker rmi registry.cn-beijing.aliyuncs.com/yzxd/kube-controller-manager:v1.12.1
docker rmi registry.cn-beijing.aliyuncs.com/yzxd/kube-scheduler:v1.12.1
docker rmi registry.cn-beijing.aliyuncs.com/yzxd/kube-proxy:v1.12.1
docker rmi registry.cn-beijing.aliyuncs.com/yzxd/etcd:3.2.24
docker rmi registry.cn-beijing.aliyuncs.com/yzxd/pause:3.1
docker rmi registry.cn-beijing.aliyuncs.com/yzxd/coredns:1.2.2
docker rmi registry.cn-beijing.aliyuncs.com/yzxd/flannel:v0.10.0-amd64

[root@k8s-master ~]# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                v1.12.1             61afff57f010        2 months ago        96.6MB
k8s.gcr.io/kube-scheduler            v1.12.1             d773ad20fd80        2 months ago        58.3MB
k8s.gcr.io/kube-apiserver            v1.12.1             dcb029b5e3ad        2 months ago        194MB
k8s.gcr.io/kube-controller-manager   v1.12.1             aa2dd57c7329        2 months ago        164MB
k8s.gcr.io/etcd                      3.2.24              3cab8e1b9802        2 months ago        220MB
k8s.gcr.io/coredns                   1.2.2               367cdc8433a4        3 months ago        39.2MB
quay.io/coreos/flannel               v0.10.0-amd64       f0fad859c909        10 months ago       44.6MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        11 months ago       742kB

如果想獲取更高k8s.gcr.io相關(guān)包,可根據(jù)以下方式獲取,因為docker.io倉庫對google的容器做了鏡像,這根據(jù)網(wǎng)速快慢,決定下載快慢,網(wǎng)卡實時,可能會下載失敗。下載完后修改成對應(yīng)的名稱。

docker pull mirrorgooglecontainers/kube-apiserver:v1.13.0
docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.13.0
docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.13.0
docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.13.0

到目前為止,所以鏡像文件已經(jīng)準(zhǔn)備完畢!!!

初始化k8s

[root@k8s-master ~]# vim /etc/sysconfig/kubelet 
#指定額外的初始化信息,下面表示禁用操作系統(tǒng)的swap功能
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

進(jìn)行初始化
kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

[preflight/images] Pulling images required for setting up a Kubernetes cluster ##表示開始拉取鏡像
[preflight/images] This might take a minute or two, depending on the speed of your internet connection
[preflight/images] You can also perform this action in beforehand using 'kubeadm config images pull' ##由于以上操作,把相關(guān)鏡像已經(jīng)pull到本地了,很快就結(jié)束
[certificates] Generated apiserver-kubelet-client certificate and key. ##可以看到生成一堆證書
[certificates] Generated sa key and public key.
[certificates] Generated front-proxy-ca certificate and key.
[certificates] Generated front-proxy-client certificate and key.
[certificates] Generated etcd/ca certificate and key. 
[controlplane] wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
##yml控制給pod分多少cpu和內(nèi)存
[controlplane] wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.
###markmaster幫我們把此節(jié)點標(biāo)記為主節(jié)點
[markmaster] Marking the node k8s-master as master by adding the label "node-role.kubernetes.io/master=''"
[markmaster] Marking the node k8s-master as master by adding the taints [node-role.kubernetes.io/master:NoSchedule]
##bootstraptoken是引導(dǎo)令牌,讓其他nodes加入集群時用的
[bootstraptoken] using token: as5gwu.ktojf6cueg0doexi
[bootstraptoken] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
##從k8s 1.11版開始,DNS正式被CoreDNS取代,它支持很多新的功能,比如資源的動態(tài)配置等
[addons] Applied essential addon: CoreDNS
##kube-proxy托管在K8S之上,負(fù)責(zé)生產(chǎn)service的iptables和ipvs規(guī)則,從k8s1.11開始默認(rèn)支持ipvs
[addons] Applied essential addon: kube-proxy
##看到初始化成功了
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
##還需要手工運行一下命令
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
##其他機器裝好包后,可以執(zhí)行下面的命令來把nodes節(jié)點加入集群,把下面的命令記得自己保存起來,要不將來找不著就加不進(jìn)去了
##其實這么設(shè)計的目的就是不是誰都能加入集群的,需要拿著下面的令牌來加入
You can now join any number of machines by running the following on each node
as root:
  kubeadm join 192.168.148.10:6443 --token fp2kiw.ckplxjg0qqk54269 --discovery-token-ca-cert-hash sha256:6b920472ac5213a002dee75d62d6d3b0caf8051e5cdf8d7c37066d85d5abe022 --ignore-preflight-errors=Swap

提示:如果安裝出錯了,可以執(zhí)行kubeadm reset命令進(jìn)行重置,再重新執(zhí)行kubeadm init...命令

請記錄好最后一行的 kubeadm join ...,這是其它節(jié)點加入集群的口令。

手動執(zhí)行初始化提示的命令:

[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

查看狀態(tài)信息

查看組件信息:

[root@k8s-master ~]# kubectl get cs 
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok                   
controller-manager   Healthy   ok                   
etcd-0               Healthy   {"health": "true"}

查看節(jié)點信息:

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES     AGE       VERSION
k8s-master   NotReady   master    51m       v1.12.1

說明:狀態(tài)為NotReady,是因為還缺flannel組件,沒有這個組件是沒法設(shè)置網(wǎng)絡(luò)的。

安裝flannel網(wǎng)絡(luò)組件(master上執(zhí)行)

下載地址:https://github.com/coreos/flannel

image.png

[root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

查看當(dāng)前master節(jié)點上kube-system名稱空間里運行的所有pod狀態(tài):

[root@k8s-master ~]# kubectl  get pods -n kube-system
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-576cbf47c7-4hn4p             1/1     Running   0          3h50m
coredns-576cbf47c7-fwpvk             1/1     Running   0          3h50m
etcd-k8s-master                      1/1     Running   0          3h49m
kube-apiserver-k8s-master            1/1     Running   0          3h49m
kube-controller-manager-k8s-master   1/1     Running   0          3h49m
kube-flannel-ds-amd64-m7pgh          1/1     Running   0          3h46m
kube-proxy-5h8wg                     1/1     Running   0          145m
kube-scheduler-k8s-master            1/1     Running   0          3h49m

查看nodes節(jié)點信息,看到status這回變成ready狀態(tài)

[root@k8s-master chenzx]# kubectl get nodes
NAME         STATUS    ROLES     AGE       VERSION
k8s-master   Ready     master    1h        v1.12.1

查看當(dāng)前節(jié)點名稱空間

[root@k8s-master chenzx]# kubectl  get ns
NAME          STATUS    AGE
default       Active    3h
kube-public   Active    3h
kube-system   Active    3h

在nodes節(jié)點上安裝k8s

nodes上可以不安裝kubectl
yum -y install docker-ce-18.06.0.ce-3.el7 kubelet-1.12.1-0 kubeadm-1.12.1-0

設(shè)置過濾警告項

vim /etc/sysconfig/kubelet

#指定額外的初始化信息
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

加入集群口令:
kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

# 加入集群提示
[tlsbootstrap] Waiting for the kubelet to perform the TLS Bootstrap...
[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "k8s-node1" as an annotation
This node has joined the cluster:
* Certificate signing request was sent to master and a response
  was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the master to see this node join the cluster.

現(xiàn)在在master節(jié)點查看節(jié)點信息

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES    AGE    VERSION
k8s-master   Ready    master   4h2m   v1.12.1
k8s-node01   Ready    <none>   161m   v1.12.1

其它節(jié)點進(jìn)行相同操作!!!

到此,集群搭建完畢!!!

原始資源可以參考:
http://blog.itpub.net/28916011/viewspace-2213536
https://blog.csdn.net/solaraceboy/article/details/83308339

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容