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

資訊專欄INFORMATION COLUMN

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

atinosun / 2785人閱讀

摘要:所以,選擇把運(yùn)行直接運(yùn)行在宿主機(jī)中,使用容器部署其他組件。獨(dú)立部署方式所需機(jī)器資源多按照集群的奇數(shù)原則,這種拓?fù)涞募宏P(guān)控制平面最少就要臺(tái)宿主機(jī)了。

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

Kubeadm原理簡(jiǎn)述

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

# 創(chuàng)建一個(gè) Master 節(jié)點(diǎn)
$ kubeadm init

# 將一個(gè) Node 節(jié)點(diǎn)加入到當(dāng)前集群中
$ kubeadm join 

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

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

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

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

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

執(zhí)行 kubeadm join時(shí):

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

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

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

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

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

Kubeadm部署一個(gè)高可用集群 Kubernetes的高可用

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

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

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

所需機(jī)器資源少

部署簡(jiǎn)單,利于管理

容易進(jìn)行橫向擴(kuò)展

風(fēng)險(xiǎn)大,一臺(tái)宿主機(jī)掛了,master和etcd就都少了一套,集群冗余度受到的影響比較大。

Etcd獨(dú)立部署方式:

所需機(jī)器資源多(按照Etcd集群的奇數(shù)原則,這種拓?fù)涞募宏P(guān)控制平面最少就要6臺(tái)宿主機(jī)了)。

部署相對(duì)復(fù)雜,要獨(dú)立管理etcd集群和和master集群。

解耦了控制平面和Etcd,集群風(fēng)險(xiǎn)小健壯性強(qiáng),多帶帶掛了一臺(tái)master或etcd對(duì)集群的影響很小。

部署環(huán)境

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

機(jī)器:

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

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

# 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

部署步驟 機(jī)器準(zhǔn)備
在所有節(jié)點(diǎn)上操作:

關(guān)閉selinux,firewall

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

關(guān)閉swap,(1.8版本后的要求,目的應(yīng)該是不想讓swap干擾pod可使用的內(nèi)存limit)

swapoff -a

修改下面內(nèi)核參數(shù),否則請(qǐng)求數(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é)點(diǎn)上操作

將Kubernetes安裝源改為阿里云,方便國內(nèi)網(wǎng)絡(luò)環(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
安裝配置負(fù)載均衡
在haproxy節(jié)點(diǎn)操作:
# 安裝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 # 指定后端機(jī)器及端口,負(fù)載方式為輪詢
    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

# 開機(jī)默認(rèn)啟動(dòng)haproxy,開啟服務(wù)
systemctl enable haproxy
systemctl start haproxy

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

準(zhǔn)備集群配置文件,目前用的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 # 計(jì)劃使用flannel網(wǎng)絡(luò)插件,指定pod網(wǎng)段及掩碼
EOF

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

systemctl enable kubelet
systemctl start kubelet
kubeadm  config images pull  --config kubeadm-config.yaml  # 通過阿里源預(yù)先拉鏡像
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é)點(diǎn)用以下命令加入集群:

  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é)點(diǎn)用以下命令加入集群:
kubeadm join 192.168.41.232:6443 --token ocb5tz.pv252zn76rl4l3f6 
    --discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2 

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

加入另外一個(gè)master節(jié)點(diǎn)

在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)在,在任何一個(gè)master 節(jié)點(diǎn),執(zhí)行kubectl get no,可以看到,集群中已經(jīng)有2臺(tái)master節(jié)點(diǎn)了

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

加入兩個(gè)工作節(jié)點(diǎn)

分別在兩個(gè)node節(jié)點(diǎn)操作:
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

可以看到兩個(gè)node節(jié)點(diǎn)都加入集群了。可是,各個(gè)節(jié)點(diǎn)狀態(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

原來是因?yàn)榫W(wǎng)絡(luò)插件沒有就緒導(dǎo)致的。所以 ,我們來安裝一波

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

再次查看節(jié)點(diǎn)狀態(tài),可以看到所有節(jié)點(diǎn)都已經(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

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

集群測(cè)試

跟上篇文章minikube部署一樣,這里部署一個(gè)簡(jiǎn)單的goweb服務(wù)來測(cè)試集群,運(yùn)行時(shí)暴露8000端口,同時(shí)訪問/info路徑會(huì)顯示容器的主機(jī)名。

準(zhǔn)備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

部署服務(wù)

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

查看pod及服務(wù)

[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個(gè)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端口

測(cè)試訪問

[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
#可以看到,對(duì)SVC的請(qǐng)求會(huì)在pod間負(fù)載均衡。
小結(jié)

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/27767.html

相關(guān)文章

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

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

    superw 評(píng)論0 收藏0
  • Kubernetes幾種主流部署方式01-minikube部署

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

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

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

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

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

    Tecode 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<