溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用Kubespray 2.8.3部署生產(chǎn)可用的Kubernetes集群(1.12.5)

發(fā)布時(shí)間:2020-05-29 05:42:53 來(lái)源:網(wǎng)絡(luò) 閱讀:753 作者:lilizhou2008 欄目:云計(jì)算

Kubernetes的安裝部署是難中之難,每個(gè)版本安裝方式都略有區(qū)別。筆者一直想找一種支持多平臺(tái)、相對(duì)簡(jiǎn)單適用于生產(chǎn)環(huán)境 的部署方案。經(jīng)過(guò)一段時(shí)間的調(diào)研,有如下幾種解決方案進(jìn)入筆者視野:

部署方案 優(yōu)點(diǎn) 缺點(diǎn)
Kubeadm 官方出品 部署較麻煩、不夠透明
Kubespray 官方出品、部署較簡(jiǎn)單、懂Ansible就能上手 不夠透明
RKE 部署較簡(jiǎn)單、需要花一些時(shí)間了解RKE的cluster.yml配置文件 不夠透明
手動(dòng)部署 第三方操作文檔 完全透明、可配置、便于理解K8s各組件之間的關(guān)系 部署非常麻煩,容易出錯(cuò)

其他諸如Kops之類(lèi)的方案,由于無(wú)法跨平臺(tái),或者其他因素,被我pass了。

最終,筆者決定使用Kubespray部署Kubernetes集群。也希望大家能夠一起討論,總結(jié)出更加好的部署方案。

廢話不多說(shuō),以下是操作步驟。

注:撰寫(xiě)本文時(shí),筆者臨時(shí)租賃了幾臺(tái)海外阿里云機(jī)器,所以不存在無(wú)法連接gcr.io的問(wèn)題。如果您的服務(wù)器在國(guó)內(nèi),請(qǐng):

  • 考慮科學(xué)上網(wǎng)
  • 修改Kubespray中的gcr地址,改為其他倉(cāng)庫(kù)地址,例如阿里云鏡像地址(修改roles/download/defaults/main.yml 即可)
  • 先弄個(gè)海外環(huán)境,安裝完Kubernetes后,將鏡像docker save 下來(lái),再到國(guó)內(nèi)的服務(wù)器上docker load

主機(jī)規(guī)劃

IP 作用
172.21.240.64 ansible-client
172.21.240.65 master,node
172.21.240.66 master,node
172.21.240.67 node
172.21.240.68 node
172.21.240.69 node

準(zhǔn)備工作

關(guān)閉selinux

所有機(jī)器都必須關(guān)閉selinux,執(zhí)行如下命令即可。

~]# setenforce 0
~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

網(wǎng)絡(luò)配置

在master機(jī)器上
~]# firewall-cmd --permanent --add-port=6443/tcp
~]# firewall-cmd --permanent --add-port=2379-2380/tcp
~]# firewall-cmd --permanent --add-port=10250/tcp
~]# firewall-cmd --permanent --add-port=10251/tcp
~]# firewall-cmd --permanent --add-port=10252/tcp
~]# firewall-cmd --permanent --add-port=10255/tcp
~]# firewall-cmd --reload
~]# modprobe br_netfilter
~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
~]# sysctl -w net.ipv4.ip_forward=1

如果關(guān)閉了防火墻,則只需執(zhí)行最下面三行。

在node機(jī)器上
~]# firewall-cmd --permanent --add-port=10250/tcp
~]# firewall-cmd --permanent --add-port=10255/tcp
~]# firewall-cmd --permanent --add-port=30000-32767/tcp
~]# firewall-cmd --permanent --add-port=6783/tcp
~]# firewall-cmd  --reload
~]# modprobe br_netfilter
~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
~]# sysctl -w net.ipv4.ip_forward=1

如果關(guān)閉了防火墻,則只需執(zhí)行最下面兩行。

【可選】關(guān)閉防火墻
systemctl stop firewalld

在ansible-client機(jī)器上安裝必備軟件

# 安裝epel源
~]# sudo yum install -y epel-release
# 安裝ansible
~]# sudo yum install -y ansible
# 安裝Python 3.6
~]# sudo yum install –y python36

在ansible-client機(jī)器上配置免密登錄其他機(jī)器

生成ssh公鑰和私鑰

在ansible-cilent機(jī)器上執(zhí)行:

~]# ssh-keygen

然后三次回車(chē),生成ssh公鑰和私鑰。

建立ssh單向通道

在ansible-cilent機(jī)器上執(zhí)行:

~]# ssh-copy-id root@172.21.240.65      #將公鑰分發(fā)給88機(jī)器
~]# ssh-copy-id root@172.21.240.66
~]# ssh-copy-id root@172.21.240.67
~]# ssh-copy-id root@172.21.240.68
~]# ssh-copy-id root@172.21.240.69

在ansible-client機(jī)器上安裝kubespray

  • 下載kubespray

    TIPS

    • 筆者撰寫(xiě)本文時(shí),最新的RELEASE是2.8.3,RELEASE版本下載地址:<https://github.com/kubernetes-incubator/kubespray/releases>)
    • 強(qiáng)烈大家使用RELEASE分支進(jìn)行部署,特別是在生產(chǎn)環(huán)境!Master分支不一定能部署成功,近日有童鞋無(wú)法成功部署就是因?yàn)槭褂玫腗aster分支。
    ~]# git clone https://github.com/kubernetes-incubator/kubespray.git
    ~]# cd kubespray
    ~]# git checkout v2.8.3
  • 安裝kubespray需要的包:

    ~]# sudo pip install -r requirements.txt
  • 拷貝inventory/sample ,命名為inventory/mycluster ,mycluster可以改為其他你喜歡的名字

    cp -rfp inventory/sample inventory/mycluster
  • 使用inventory_builder,初始化inventory文件

    ~]# declare -a IPS=(172.21.240.65 172.21.240.66 172.21.240.67 172.21.240.68 172.21.240.69)
    ~]# CONFIG_FILE=inventory/mycluster/hosts.ini python36 contrib/inventory_builder/inventory.py ${IPS[@]}

    此時(shí),會(huì)看到inventory/mycluster/host.ini 文件內(nèi)容類(lèi)似如下:

    [all]
    node1    ansible_host=172.21.240.65 ip=172.21.240.65
    node2    ansible_host=172.21.240.66 ip=172.21.240.66
    node3    ansible_host=172.21.240.67 ip=172.21.240.67
    node4    ansible_host=172.21.240.68 ip=172.21.240.68
    node5    ansible_host=172.21.240.69 ip=172.21.240.69
    
    [kube-master]
    node1    
    node2    
    
    [etcd]
    node1    
    node2    
    node3    
    
    [kube-node]
    node1    
    node2    
    node3    
    node4    
    node5    
    
    [k8s-cluster:children]
    kube-master      
    kube-node        
    
    [calico-rr]
    
    [vault]
    node1    
    node2    
    node3
  • 使用ansible playbook部署kubespray

    ~]# ansible-playbook -i inventory/mycluster/hosts.ini --become --become-user=root cluster.yml
  • 等待大概20分鐘左右,Kubernetes即可安裝完畢。

驗(yàn)證

驗(yàn)證1:查看Node狀態(tài)

主要是驗(yàn)證各個(gè)Node是否正常。

]# kubectl get nodes
NAME    STATUS   ROLES         AGE     VERSION
node1   Ready    master,node   8m41s   v1.12.5
node2   Ready    master,node   7m32s   v1.12.5
node3   Ready    node          6m59s   v1.12.5
node4   Ready    node          6m59s   v1.12.5
node5   Ready    node          6m59s   v1.12.5

每個(gè)node都是ready的,說(shuō)明OK。

驗(yàn)證2:部署一個(gè)NGINX

主要是驗(yàn)證網(wǎng)絡(luò)等是否正常,步驟如下。

  • 在Master所在節(jié)點(diǎn)(本文使用的是172.21.240.66 ),準(zhǔn)備一個(gè)名為nginx.yaml 的文件,內(nèi)容如下:

    kind: Service
    apiVersion: v1
    metadata:
    name: nginx-service
    spec:
    selector:
      app: nginx
    type: NodePort
    ports:
      # 協(xié)議:
      - protocol: TCP
        # service的端口,隨便寫(xiě)
        port: 80
        targetPort: 80
        nodePort: 32000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx-deployment
    # 描述Deployment的標(biāo)簽,讓Deployment變得可讀
    labels:
      app: nginx
    spec:
    replicas: 3
    selector:
      # label selector 標(biāo)簽選擇器,他會(huì)找到帶有app: nginx的所有pod
      matchLabels:
        app: nginx
    template:
      # Pod模板開(kāi)始
      metadata:
        # 定義這些pod帶有哪些標(biāo)簽
        labels:
          app: nginx
      spec:
        containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
              - containerPort: 80
  • 在該文件所在目錄執(zhí)行如下命令創(chuàng)建Service以及Deployment

    kubectl create -f nginx.yaml

    如內(nèi)容所示,該NGINX以NodePort方式暴露到Kubernetes集群外部,端口為32000。

  • 執(zhí)行如下命令驗(yàn)證:

    # 查看nginx服務(wù)詳情
    ~]# kubectl get svc nginx-service
    NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    nginx-service   NodePort   10.233.59.132   <none>        80:32000/TCP   4m56s
    
    # 訪問(wèn)測(cè)試,如果能夠正常返回NGINX首頁(yè),說(shuō)明正常
    ~]# curl 172.21.240.66:32000

卸載Kubespray

]# ansible-playbook -i inventory/mycluster/hosts.ini reset.yml

參考文檔:

  • Kubespray – 10 Simple Steps for Installing a Production-Ready, Multi-Master HA Kubernetes Cluster:<https://dzone.com/articles/kubespray-10-simple-steps-for-installing-a-product>

    TIPS:主要參考文檔,里面還講解了Kubespray的一些配置、可能會(huì)遇到的問(wèn)題及解決方案等。

  • 使用Kubespray 部署kubernetes 高可用集群:<https://yq.aliyun.com/articles/505382>

  • kubespray(ansible)自動(dòng)化安裝k8s集群:<https://www.cnblogs.com/iiiiher/p/8128184.html> / <https://www.jianshu.com/p/d8bee7c8a1e6>

    TIPS:里面有將如何替換gcr鏡像為國(guó)內(nèi)鏡像

  • Installing Kubernetes On-premises/Cloud Providers with Kubespray:<https://kubernetes.io/docs/setup/custom-cloud/kubespray/>

Docker與Kubernetes開(kāi)源書(shū)

  • Gitee:<https://gitee.com/itmuch/docker-book>
  • GitHub:<https://github.com/itmuch/docker-book>

本文首發(fā)

http://www.itmuch.com/install/kubernetes-deploy-by-kubespray2.8.3/

干貨分享

使用Kubespray 2.8.3部署生產(chǎn)可用的Kubernetes集群(1.12.5)

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI