国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Kubernetes的幾種主流部署方式02-kubeadm部署1.14版本高可用集群

superw / 2179人閱讀

摘要:所以,選擇把運行直接運行在宿主機中,使用容器部署其他組件。獨立部署方式所需機器資源多按照集群的奇數(shù)原則,這種拓撲的集群關控制平面最少就要臺宿主機了。

在上篇文章minikube部署中,有提到Minikube部署Kubernetes的核心就是Kubeadm,這篇文章來詳細說明下Kubeadm原理及部署步驟。寫這篇文章的時候,Kubernetes1.14剛剛發(fā)布,所以部署步驟以1.14版為主。

Kubeadm原理簡述

Kubeadm工具的出發(fā)點很簡單,就是盡可能簡單的部署一個生產(chǎn)可用的Kubernetes集群。實際也確實很簡單,只需要兩條命令:

# 創(chuàng)建一個 Master 節(jié)點
$ kubeadm init

# 將一個 Node 節(jié)點加入到當前集群中
$ kubeadm join 

kubeadm做了這些事
執(zhí)行 kubeadm init時:

自動化的集群機器合規(guī)檢查

自動化生成集群運行所需的各類證書及各類配置,并將Master節(jié)點信息保存在名為cluster-info的ConfigMap中。

通過static Pod方式,運行API server, controller manager 、scheduler及etcd組件。

生成Token以便其他節(jié)點加入集群

執(zhí)行 kubeadm join時:

節(jié)點通過token訪問kube-apiserver,獲取cluster-info中信息,主要是apiserver的授權信息(節(jié)點信任集群)。

通過授權信息,kubelet可執(zhí)行TLS bootstrapping,與apiserver真正建立互信任關系(集群信任節(jié)點)。

簡單來說,kubeadm做的事就是把大部分組件都容器化,通過StaticPod方式運行,并自動化了大部分的集群配置及認證等工作,簡單幾步即可搭建一個可用Kubernetes的集群。

這里有個問題,為什么不把kubelet組件也容器化呢,是因為,kubelet在配置容器網(wǎng)絡、管理容器數(shù)據(jù)卷時,都需要直接操作宿主機,而如果現(xiàn)在 kubelet 本身就運行在一個容器里,那么直接操作宿主機就會變得很麻煩。比如,容器內要做NFS的掛載,需要kubelet先在宿主機執(zhí)行mount掛載NFS。如果kubelet運行在容器中問題來了,如果kubectl運行在容器中,要操作宿主機的Mount Namespace是非常復雜的。所以,kubeadm選擇把kubelet運行直接運行在宿主機中,使用容器部署其他Kubernetes組件。所以,Kubeadm部署要安裝的組件有Kubeadm、kubelet、kubectl三個。

上面說的是kubeadm部署方式的一般步驟,kubeadm部署是可以自由定制的,包括要容器化哪些組件,所用的鏡像,是否用外部etcd,是否使用用戶證書認證等以及集群的配置等等,都是可以靈活定制的,這也是kubeadm能夠快速部署一個高可用的集群的基礎。詳細的說明可以參考官方Reference。但是,kubeadm最重要的作用還是解決集群部署問題,而不是集群配置管理的問題,官方也建議把Kubeadm作為一個基礎工具,在其上層再去量身定制適合自己的集群的管理工具(例如minikube)。

Kubeadm部署一個高可用集群 Kubernetes的高可用

Kubernetes的高可用主要指的是控制平面的高可用,簡單說,就是有多套Master節(jié)點組件和Etcd組件,工作節(jié)點通過負載均衡連接到各Master。HA有兩種做法,一種是將etcd與Master節(jié)點組件混布在一起:

另外一種方式是,使用獨立的Etcd集群,不與Master節(jié)點混布:

兩種方式的相同之處在于都提供了控制平面的冗余,實現(xiàn)了集群高可以用,區(qū)別在于:
Etcd混布方式:

所需機器資源少

部署簡單,利于管理

容易進行橫向擴展

風險大,一臺宿主機掛了,master和etcd就都少了一套,集群冗余度受到的影響比較大。

Etcd獨立部署方式:

所需機器資源多(按照Etcd集群的奇數(shù)原則,這種拓撲的集群關控制平面最少就要6臺宿主機了)。

部署相對復雜,要獨立管理etcd集群和和master集群。

解耦了控制平面和Etcd,集群風險小健壯性強,多帶帶掛了一臺master或etcd對集群的影響很小。

部署環(huán)境

由于機器資源不足,下面的部署測試,只會以混布的方式部署一個1*haproxy,2*master,2*node,共5臺機器的集群,實際上由于etcd選舉要過半數(shù),至少要3臺master節(jié)點才能構成高可用,在生產(chǎn)環(huán)境,還是要根據(jù)實際情況,盡量選擇風險低的拓撲結構。

機器:

master-1:192.168.41.230 (控制平面節(jié)點1)
master-2:192.168.41.231 (控制平面節(jié)點2)
node-1:172.16.201.108 (工作節(jié)點1)
node-2:172.16.201.109 (工作節(jié)點2)
haproxy:192.168.41.231 (haproxy)

系統(tǒng)內核版本:

# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) 
# uname -r               
5.0.5-1.el7.elrepo.x86_64

集群版本

kubeadm:1.14.0
Kubernetes:1.14.0
Docker:Community 18.09.4
haproxy: 1.5.18

部署步驟 機器準備
在所有節(jié)點上操作:

關閉selinux,firewall

setenforce  0
sed -i "s/SELINUX=enforcing/SELINUX=permissive/" /etc/selinux/config 
systemctl stop firewalld
systemctl disable firewalld

關閉swap,(1.8版本后的要求,目的應該是不想讓swap干擾pod可使用的內存limit)

swapoff -a

修改下面內核參數(shù),否則請求數(shù)據(jù)經(jīng)過iptables的路由可能有問題

cat <  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
安裝kubeadm、docker
在除了haproxy以外所有節(jié)點上操作

將Kubernetes安裝源改為阿里云,方便國內網(wǎng)絡環(huán)境安裝

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

安裝docker-ce

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce

安裝kubelet kubeadm kubectl

 yum install -y  kubelet kubeadm kubectl
安裝配置負載均衡
在haproxy節(jié)點操作:
# 安裝haproxy
yum install haproxy -y 

# 修改haproxy配置
cat << EOF > /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    mode                    tcp
    log                     global
    retries                 3
    timeout connect         10s
    timeout client          1m
    timeout server          1m

frontend kube-apiserver
    bind *:6443 # 指定前端端口
    mode tcp
    default_backend master

backend master # 指定后端機器及端口,負載方式為輪詢
    balance roundrobin
    server master-1  192.168.41.230:6443 check maxconn 2000
    server master-2  192.168.41.231:6443 check maxconn 2000
EOF

# 開機默認啟動haproxy,開啟服務
systemctl enable haproxy
systemctl start haproxy

# 檢查服務端口情況:
# netstat -lntup | grep 6443
tcp        0      0 0.0.0.0:6443            0.0.0.0:*               LISTEN      3110/haproxy
部署Kubernetes
在master-1節(jié)點操作:

準備集群配置文件,目前用的api版本為v1beta1,具體配置可以參考官方reference

cat << EOF > /root/kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.14.0 # 指定1.14版本
controlPlaneEndpoint: 192.168.41.232:6443 # haproxy地址及端口
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers # 指定鏡像源為阿里源
networking:
  podSubnet: 10.244.0.0/16 # 計劃使用flannel網(wǎng)絡插件,指定pod網(wǎng)段及掩碼
EOF

執(zhí)行節(jié)點初始化

systemctl enable kubelet
systemctl start kubelet
kubeadm  config images pull  --config kubeadm-config.yaml  # 通過阿里源預先拉鏡像
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs

安裝成功,可以看到輸出

You can now join any number of the control-plane node running the following command on each as root:
# master節(jié)點用以下命令加入集群:

  kubeadm join 192.168.41.232:6443 --token ocb5tz.pv252zn76rl4l3f6 
    --discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2 
    --experimental-control-plane --certificate-key 20366c9cdbfdc1435a6f6d616d988d027f2785e34e2df9383f784cf61bab9826

Then you can join any number of worker nodes by running the following on each as root:
# 工作節(jié)點用以下命令加入集群:
kubeadm join 192.168.41.232:6443 --token ocb5tz.pv252zn76rl4l3f6 
    --discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2 

原來的kubeadm版本,join命令只用于工作節(jié)點的加入,而新版本加入了 --experimental-contaol-plane 參數(shù)后,控制平面(master)節(jié)點也可以通過kubeadm join命令加入集群了。

加入另外一個master節(jié)點

在master-2操作:
kubeadm join 192.168.41.232:6443 --token ocb5tz.pv252zn76rl4l3f6 
--discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2 
--experimental-control-plane --certificate-key 20366c9cdbfdc1435a6f6d616d988d027f2785e34e2df9383f784cf61bab9826

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

現(xiàn)在,在任何一個master 節(jié)點,執(zhí)行kubectl get no,可以看到,集群中已經(jīng)有2臺master節(jié)點了

# kubectl get no
NAME       STATUS     ROLES    AGE     VERSION
master-1   NotReady   master   34m     v1.14.0
master-2   NotReady   master   4m52s   v1.14.0

加入兩個工作節(jié)點

分別在兩個node節(jié)點操作:
kubeadm join 192.168.41.232:6443 --token ocb5tz.pv252zn76rl4l3f6 
    --discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2 

再次執(zhí)行kubectl get no

# kubectl  get no
NAME       STATUS     ROLES    AGE     VERSION
master-1   NotReady   master   45m     v1.14.0
master-2   NotReady   master   15m     v1.14.0
node-1     NotReady      6m19s   v1.14.0
node-2     NotReady      4m59s   v1.14.0

可以看到兩個node節(jié)點都加入集群了。可是,各個節(jié)點狀態(tài)為什么都是NotReady呢。通過執(zhí)行kubectl describe master-1,可以看到這樣的提示:

runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

原來是因為網(wǎng)絡插件沒有就緒導致的。所以 ,我們來安裝一波

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

再次查看節(jié)點狀態(tài),可以看到所有節(jié)點都已經(jīng)ready了。

# kubectl  get no
NAME       STATUS   ROLES    AGE    VERSION
master-1   Ready    master   134m   v1.14.0
master-2   Ready    master   104m   v1.14.0
node-1     Ready       94m    v1.14.0
node-2     Ready       93m    v1.14.0

至此,一個2主節(jié)點2工作節(jié)點的k8s集群已經(jīng)搭建完畢。如果要加入更多的master或node節(jié)點,只要多次執(zhí)行kubeadm join命令加入集群就好,不需要額外配置,非常方便。

集群測試

跟上篇文章minikube部署一樣,這里部署一個簡單的goweb服務來測試集群,運行時暴露8000端口,同時訪問/info路徑會顯示容器的主機名。

準備deployment和svc的yaml:

# deployment-goweb.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: goweb
spec:
  selector:
    matchLabels:
      app: goweb
  replicas: 4
  template:
    metadata:
      labels:
        app: goweb
    spec: 
      containers: 
      - image: lingtony/goweb
        name: goweb
        ports: 
        - containerPort: 8000
# svc-goweb.yaml
apiVersion: v1
kind: Service
metadata:
  name: gowebsvc
spec:
  selector:
    app: goweb
  ports:
  - name: default
    protocol: TCP
    port: 80
    targetPort: 8000

部署服務

kubectl apply -f deployment-goweb.yaml
kubectl  apply -y svc-goweb.yaml

查看pod及服務

[root@master-1 ~]# kubectl  get po -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
goweb-6c569f884-67z89   1/1     Running   0          25m   10.244.1.2   node-1              
goweb-6c569f884-bt4p6   1/1     Running   0          25m   10.244.1.3   node-1              
goweb-6c569f884-dltww   1/1     Running   0          25m   10.244.1.4   node-1              
goweb-6c569f884-vshkm   1/1     Running   0          25m   10.244.3.4   node-2              
# 可以看到,4個pod分布在不同的node上
[root@master-1 ~]# kubectl  get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
gowebsvc     ClusterIP   10.106.202.0           80/TCP    11m
kubernetes   ClusterIP   10.96.0.1              443/TCP   21h
# 暴露80端口

測試訪問

[root@master-1 ~]# curl http://10.106.202.0/info
Hostname: goweb-6c569f884-bt4p6
[root@master-1 ~]# curl http://10.106.202.0/info
Hostname: goweb-6c569f884-67z89
[root@master-1 ~]# curl http://10.106.202.0/info
Hostname: goweb-6c569f884-vshkm
#可以看到,對SVC的請求會在pod間負載均衡。
小結

本文簡單介紹了kubeadm工具原理,以及如何用它部署一個高可用的kubernetes集群。需要注意的是,kubeadm工具總體已經(jīng)GA,可以在生產(chǎn)環(huán)境使用了。但是文中通過"kubeadm join -experimental-contaol-plane"參數(shù)增加主節(jié)點的方式,還是在alpha階段,實際在生產(chǎn)環(huán)境還是用init方式來增加主節(jié)點比較穩(wěn)定。kubeadm更多詳細配置可以參考官方文檔

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32964.html

相關文章

  • Kubernetes幾種主流部署方式02-kubeadm部署1.14版本可用集群

    摘要:所以,選擇把運行直接運行在宿主機中,使用容器部署其他組件。獨立部署方式所需機器資源多按照集群的奇數(shù)原則,這種拓撲的集群關控制平面最少就要臺宿主機了。 在上篇文章minikube部署中,有提到Minikube部署Kubernetes的核心就是Kubeadm,這篇文章來詳細說明下Kubeadm原理及部署步驟。寫這篇文章的時候,Kubernetes1.14剛剛發(fā)布,所以部署步驟以1.14版為...

    atinosun 評論0 收藏0
  • Kubernetes幾種主流部署方式01-minikube部署

    摘要:代表的解決方案為。雖然官網(wǎng)列出的部署方式很多,但也不用被這么多種部署方式搞糊涂了。雖然只是一條命令,但其實執(zhí)行了很多步驟命令執(zhí)行后輸出如下可以看到,主要做了這些事創(chuàng)建了名為的虛擬機,并在虛擬機中安裝了容器運行時。 綜述 Kubernetes集群的組件眾多,要部署一套符合生產(chǎn)環(huán)境的集群不是一件容易的事。好在隨著社區(qū)的快速發(fā)展,特別是在它成為事實上的容器編排標準以后,基本所有的主流云平臺都...

    Lionad-Morotar 評論0 收藏0
  • Kubernetes幾種主流部署方式01-minikube部署

    摘要:代表的解決方案為。雖然官網(wǎng)列出的部署方式很多,但也不用被這么多種部署方式搞糊涂了。雖然只是一條命令,但其實執(zhí)行了很多步驟命令執(zhí)行后輸出如下可以看到,主要做了這些事創(chuàng)建了名為的虛擬機,并在虛擬機中安裝了容器運行時。 綜述 Kubernetes集群的組件眾多,要部署一套符合生產(chǎn)環(huán)境的集群不是一件容易的事。好在隨著社區(qū)的快速發(fā)展,特別是在它成為事實上的容器編排標準以后,基本所有的主流云平臺都...

    浠ラ箍 評論0 收藏0
  • U產(chǎn)品快報 | UCloud 智能大數(shù)據(jù)平臺USDP公測、快杰裸金屬服務器上線等重要更新

    摘要:幫助企業(yè)快速搭建和使用大數(shù)據(jù)平臺,降低大數(shù)據(jù)開發(fā)運維成本。發(fā)布范圍北京二可用區(qū)灰度中。機型快杰版的數(shù)據(jù)庫實例,采用業(yè)內主流的計算存儲分離架構計算層使用高性能快杰云主機,存儲層采用超高性能云盤。UCloud PyPI私有源上線PyPI是Python官方的第三方庫的倉庫,為解決默認官方源在國內的訪問速度受限,并發(fā)請求受限,經(jīng)常出現(xiàn)丟包、超時等問題,UCloud 近期上線了PyPI私有源。PyPI...

    Tecode 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<