項目環境搭建【Docker+k8s】八 || kubernetes集群部署


1、kubernetes管理節點部署

1.1、部署主機

  • YN101-22.host.com

1.2、初始化管理節點

導出配置文件

cd /usr/local/kubernetes/cluster
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml

修改配置文件

advertiseAddress: 192.168.101.20 #修改為本機IP地址
imageRepository: registry.aliyuncs.com/google_containers #使用阿里雲倉庫
podSubnet: "10.244.0.0/16" #添加該行配置,pod所在網段為我們虛擬機不重疊的網段(這里用flannel默認網段)
kubernetesVersion: v1.15.0 #檢查版本是否一致,更改為下載版本
#配置文件末尾添加以下配置,默認的調度方式改為ipvs模式
 --- 
apiVersion: kubeproxy.config.k8s.io/v1alpha1 
kind: KubeProxyConfiguration 
featureGates: 
  SupportIPVSProxyMode: true 
mode: ipvs

查看所需安裝的鏡像

kubeadm config images list --config kubeadm.yml

各鏡像作用

registry.aliyuncs.com/google_containers/kube-apiserver:v1.16.0 #網關,提供restfull風格的api
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.16.0 #控制器管理,自動重啟pod
registry.aliyuncs.com/google_containers/kube-scheduler:v1.16.0 #調度
registry.aliyuncs.com/google_containers/kube-proxy:v1.16.0 #代理
registry.aliyuncs.com/google_containers/pause:3.1 #暫停
registry.aliyuncs.com/google_containers/etcd:3.3.15-0 #服務注冊與發現
registry.aliyuncs.com/google_containers/coredns:1.6.2 #域名解析服務器

拉取所需鏡像

kubeadm config images pull --config kubeadm.yml

執行初始化命令,該命令指定了初始化時需要使用的配置文件,其中添加--experimental-upload-certs參數可以在后續執行加入節點時自動分發證書,追加的tee kubeadm-init.log用以輸出日志。

kubeadm init --config=kubeadm.yml --experimental-upload-certs | tee kubeadm-init.log

注意: 如果沒有提前下載鏡像,這條命令執行時會卡在[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'大概需要2分鍾,請耐心等待。安裝k8s版本和下載的鏡像版本不統一則會出現time out waiting for the condition錯誤,中途失敗或是想修改配置可以使用kubeadm reset命令重置配置,在初始化操作。
安裝完后,會提示你輸入如下命令,復制粘貼過來,執行即可。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

上面kubeadm init執行成功后會返回給你node節點加入集群的命令,等會要在node節點上執行,需要保存下來,如果忘記了,可以使用如下命令獲取

kubeadm token create --print-join-command

查看是否初始化成功

kubectl get node

alt 圖片1

顯示以上結果,說明初始化成功,當前狀態為NotReady,因為未進行網絡配置。

2、kubernetes工作節點部署

2.1、部署主機

  • YN101-31.host.com
  • YN101-32.host.com

2.2、node節點加入集群

將master節點初始化后返回的加入集群命令在node節點中執行,命令如下(示例):

kubeadm join 192.168.101.22:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:4d9b000b6e202da14ad9cefb0aec87fcced40442b51b6d6f22816d83bec2e2aa 

alt 圖片2

在master中執行命令kubectl get node,查看node節點是否成功加入集群,當前狀態為NotReady,因為未進行網絡配置。

alt 圖片3

3、網絡配置

3.1、部署主機

  • YN101-22.host.com

3.2、簡介

上面提到的k8s狀態為NotReady,說明節點之間還沒有產生通訊,所以要進行網絡配置。不同的容器平台都需要網絡功能,它們之間的適配如果沒有統一的標准,會有很大的工作量和重復勞動,而CNI 就是這樣一個標准,它旨在為容器平台提供網絡的標准化。不同的容器平台能夠通過相同的接口調用不同的網絡組件。kubernetes中的CNI插件主要有以下:

  • Flannel
  • Calico
  • Canal
  • Weave
    注意:網絡插件選擇一個進行安裝,本教程對Flannel和Calico兩個插件進行安裝演示。

3.3、安裝網絡插件Calico

下載calico.yaml配置文件,Calico官方文檔

https://docs.projectcalico.org/manifests/calico.yaml

找到配置文件中CALICO_IPV4POOL_CIDR,value值改為初始化kubernetes管理節點配置pod網段

name: CALICO_IPV4POOL_CIDR
  value: "192.168.0.0/16"
#修改-->
  value: "10.244.0.0/16"

對資源進行配置

kubectl apply -f calico.yaml

查看calico是否部署成功。只有全部STATUS為Running才算安裝完成。

watch kubectl get pods --all-namespaces

alt 圖片4

此時,執行kubectl get node命名,所有節點狀態為Ready。

[root@yn101-22 flannel]# kubectl get node
NAME                STATUS   ROLES    AGE     VERSION
yn101-22.host.com   Ready    master   30h     v1.15.0
yn101-31.host.com   Ready    <none>   2m40s   v1.15.0
yn101-32.host.com   Ready    <none>   2m35s   v1.15.0

3.4、安裝網絡插件Flannel

下載Flannel配置文件kube-flannel.yml,github地址如下:

https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml

對資源進行配置,flannel默認的pod網段為10.244.0.0/16,如果初始化設置為其他網段,同理進行更改。

kubectl apply -f kube-flannel.yml

查看Flannel是否部署成功。只有全部STATUS為Running才算安裝完成。

watch kubectl get pods --all-namespaces
NAMESPACE     NAME                                        READY   STATUS     RESTARTS   AGE
kube-system   coredns-bccdc95cf-nxs29                     1/1     Running    0          29h
kube-system   coredns-bccdc95cf-ttngf                     1/1     Running    0          29h
kube-system   etcd-yn101-22.host.com                      1/1     Running    0          29h
kube-system   kube-apiserver-yn101-22.host.com            1/1     Running    0          29h
kube-system   kube-controller-manager-yn101-22.host.com   1/1     Running    0          29h
kube-system   kube-flannel-ds-amd64-p886d                 1/1     Running   0          28s
kube-system   kube-proxy-jx4fc                            1/1     Running    0          29h
kube-system   kube-scheduler-yn101-22.host.com            1/1     Running    0          29h

此時,執行kubectl get node命名,所有節點狀態為Ready。

[root@yn101-22 flannel]# kubectl get node
NAME                STATUS   ROLES    AGE     VERSION
yn101-22.host.com   Ready    master   30h     v1.15.0
yn101-31.host.com   Ready    <none>   2m40s   v1.15.0
yn101-32.host.com   Ready    <none>   2m35s   v1.15.0

3.5、安裝網絡插件過程問題解決

查看所有pod,狀態STATUS為pending、init、ImagePullBackOff

[root@yn101-22 flannel]# kubectl get pods -n kube-system | grep -v Running
NAME                                        READY   STATUS     RESTARTS   AGE
coredns-bccdc95cf-nxs29                     0/1     Pending    0          30h
coredns-bccdc95cf-ttngf                     0/1     Pending    0          30h
kube-flannel-ds-amd64-p886d                 0/1     Init:0/1   0          14m

根據NAME查看具體錯誤信息

kubectl describe pod <NAME> -n kube-system 

在安裝過程中大部門問題都是因為鏡像下載失敗導致,此時可以查看具體的鏡像版本,使用docker拉取,檢查是否為網絡原因或沒有對應的版本鏡像。

4、kubernetes移除管理節點

#第一步:列出所有nodes
kubectl get node
#第二步:刪除節點
kubectl delete node node3 
#第三步:重重置配置
kubeadm reset 
#第四步:重新加入集群


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM