HOME 首頁
SERVICE 服務產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務案例
NEWS 熱點資訊
ABOUT 關于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    kubernetes部署(Kubernetes部署容器群集一般首選()了網(wǎng)絡)

    發(fā)布時間:2023-04-19 00:04:46     稿源: 創(chuàng)意嶺    閱讀: 141        

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于kubernetes部署的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務客戶遍布全球各地,如需了解SEO相關業(yè)務請撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    kubernetes部署(Kubernetes部署容器群集一般首選()了網(wǎng)絡)

    一、Kubernetes 部署 MongoDB 集群

    編寫 mongo.yaml 文件,提供了一個對外暴露的 NodePort 類型的 Service,用于外部訪問。

    啟動命令 kubectl create -f mongo.yaml 。

    執(zhí)行 mongo.yaml 文件成功,如下所示:

    提供了對外暴露的服務 mongo-service ,可通過 主機:NodePort的端口 的方式訪問。

    使用 curl http://172.18.232.207:30741 測試連接 MongoDB 。

    其中 172.18.232.207 為 k8s 集群的主機(任一主機), 30741 為 mongo-service 服務的 NodePort 端口。如下圖所示:

    ------------------------------我是華麗的分割線----------------------------

    hostpath會把宿主機上的指定卷加載到容器之中,但如果 Pod 發(fā)生跨主機的重建,數(shù)據(jù)會丟失,無法保證數(shù)據(jù)持久化。如果需要做數(shù)據(jù)持久化,建議使用PV、PVC。下面是kafka數(shù)據(jù)持久化的一個示例:

    二、Kubernetes等待部署完成 kubectl wait rollout

    使用kubectl apply或者create命令創(chuàng)建/更新部署后,其pod需要時間完成創(chuàng)建/更新。

    如果在CI中不等待所有pod更新完成,下一步流程很有可能使用更新前的環(huán)境。

    根據(jù)實際情況 kubectl rollout status 命令,能夠正確的獲取rollout status。

    以上shell腳本經(jīng)過輪詢 kubectl rollout status 可以很好的解決實際問題。

    注意 kubectl wait 命令不能適用于更新部署。

    該命令只能判斷deployment是否available,不能用來判斷rollout,即available狀態(tài)的deployment,很可能老的pod還在terminating,新的pod還沒創(chuàng)建好。

    三、k8s安裝部署

    K8s集群搭建

    1 centos版本信息查看

    [root@localhost ~]# uname -a

    Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

    k8s集群機器關閉防火墻

    [root@localhost ~]# systemctl stop firewalld

    [root@localhost ~]# systemctl disable firewalld

    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

    2 安裝必要的包

    k8s集群安裝以下安裝包

    [root@k8s-node ~]# yum -y install net-tools wget vim ntpd

    [root@k8s-node ~]# systemctl enable ntpd

    [root@k8s-node ~]# systemctl start ntpd

    3配置hosts

    [root@k8s-node ~]# cat /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    192.168.248.141 k8s-master

    192.168.248.142 k8s-node

    4 部署master節(jié)點

    4.1 Master節(jié)點安裝必要的安裝包

    [root@k8s-master ~]# yum -y install etcd

    4.2更改/etc/etcd/etcd.conf配置文件

    [root@k8s-master etcd]# cat /etc/etcd/etcd.conf | grep -v "^#"

    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"

    ETCD_NAME="master"

    ETCD_ADVERTISE_CLIENT_URLS= http://k8s-master:2379,http://k8s-master:4001

    4.3設置開機啟動并驗證狀態(tài)

    [root@k8s-master ~]#systemctl enable etcd

    [root@k8s-master ~]#systemctl start etcd

    etcd檢查

    [root@k8s_master ~]# etcdctl -C http://k8s-master:4001 cluster-health

    member 8e9e05c52164694d is healthy: got healthy result from http://k8s_master:2379 cluster is healthy

    [root@k8s_master ~]# etcdctl -C http://k8s-master:2379 cluster-health

    member 8e9e05c52164694d is healthy: got healthy result from http://k8s_master:2379 cluster is healthy

    5 安裝部署docker環(huán)境(略)

    6 安裝kubernetes

    [root@k8s_master ~]# yum install kubernetes

    安裝過程中報錯如下

    Error: docker-ce conflicts with 2:docker-1.13.1-75.git8633870.el7.centos.x86_64

    可以執(zhí)行如下命令解決

    1、查看安裝過的docker:yum list installed | grep docker

    2、卸載docker:yum remove -y docker-ce.x86_64 0:18.03.0.ce-1.el7.centos

    3、刪除容器鏡像:rm -rf /var/lib/docker

    再次安裝kubernetes,安裝成功,而且會自動安裝docker

    6.1修改apiserver服務的配置文件

    [root@k8s-master kubernetes]# cat /etc/kubernetes/apiserver | grep -v "^#"

    KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

    KUBE_API_PORT="--port=8080"

    KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.248.141:2379"

    KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

    KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

    KUBE_API_ARGS=""

    6.2修改config配置文件:

    [root@k8s-master kubernetes]# cat /etc/kubernetes/config | grep -v "^#"

    KUBE_LOGTOSTDERR="--logtostderr=true"

    KUBE_LOG_LEVEL="--v=0"

    KUBE_ALLOW_PRIV="--allow-privileged=false"

    KUBE_MASTER="--master=http://192.168.248.141:8080"

    設置開機啟動,開啟服務

    [root@k8s-master ~]#systemctl enable kube-apiserver kube-controller-manager kube-scheduler docker

    [root@k8s-master ~]#systemctl start kube-apiserver kube-controller-manager kube-scheduler docker

    6.3查看服務端口:

    [root@k8s-master ~]# netstat –tnlp

    Active Internet connections (only servers)

    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   

    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1273/master        

    tcp        0      0 127.0.0.1:2380          0.0.0.0:*               LISTEN      2126/etcd          

    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      571/rpcbind        

    tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1362/dnsmasq       

    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      998/sshd           

    tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      996/cupsd          

    tcp6       0      0 ::1:25                  :::*                    LISTEN      1273/master        

    tcp6       0      0 :::4001                 :::*                    LISTEN      2126/etcd          

    tcp6       0      0 :::6443                 :::*                    LISTEN      3216/kube-apiserver

    tcp6       0      0 :::10251                :::*                    LISTEN      3222/kube-scheduler

    tcp6       0      0 :::2379                 :::*                    LISTEN      2126/etcd          

    tcp6       0      0 :::10252                :::*                    LISTEN      3221/kube-controlle

    tcp6       0      0 :::111                  :::*                    LISTEN      571/rpcbind        

    tcp6       0      0 :::8080                 :::*                    LISTEN      3216/kube-apiserver

    tcp6       0      0 :::22                   :::*                    LISTEN      998/sshd           

    tcp6       0      0 ::1:631                 :::*                    LISTEN      996/cupsd 

    7部署node節(jié)點

    7.1安裝docker(略)安裝k8s(略)

    7.2 Node節(jié)點主機做以下配置:

    修改config配置文件

    [root@k8s-node kubernetes]# cat /etc/kubernetes/config | grep -v "^#"

    KUBE_LOGTOSTDERR="--logtostderr=true"

    KUBE_LOG_LEVEL="--v=0"

    KUBE_ALLOW_PRIV="--allow-privileged=false"

    KUBE_MASTER="--master=http://192.168.248.141:8080"

    修改kubelet配置文件

    [root@k8s-node kubernetes]# cat /etc/kubernetes/kubelet | grep -v "^#"

    KUBELET_ADDRESS="--address=0.0.0.0"

    KUBELET_HOSTNAME="--hostname-override=192.168.248.142"

    KUBELET_API_SERVER="--api-servers=http://192.168.248.141:8080"

    KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

    KUBELET_ARGS=""

    設置開機啟動、開啟服務

    [root@k8s_client1 ~]# systemctl enable kubelet kube-proxy

    [root@k8s_client1 ~]# systemctl start kubelet kube-proxy

    查看端口:

    [root@k8s_client1 ~]# netstat –ntlp

    Active Internet connections (only servers)

    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   

    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1277/master        

    tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      3246/kubelet       

    tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      3133/kube-proxy    

    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      575/rpcbind        

    tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1332/dnsmasq       

    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1000/sshd          

    tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      998/cupsd          

    tcp6       0      0 ::1:25                  :::*                    LISTEN      1277/master        

    tcp6       0      0 :::4194                 :::*                    LISTEN      3246/kubelet       

    tcp6       0      0 :::10250                :::*                    LISTEN      3246/kubelet       

    tcp6       0      0 :::10255                :::*                    LISTEN      3246/kubelet       

    tcp6       0      0 :::111                  :::*                    LISTEN      575/rpcbind        

    tcp6       0      0 :::22                   :::*                    LISTEN      1000/sshd          

    tcp6       0      0 ::1:631                 :::*                    LISTEN      998/cupsd      

    Master上查看集群中的節(jié)點及節(jié)點狀態(tài)

    [root@k8s-master kubernetes]# kubectl get node

    NAME              STATUS    AGE

    192.168.248.142   Ready     2m

    [root@k8s-master kubernetes]# kubectl -s http://k8s-master:8080 get node

    NAME              STATUS    AGE

    192.168.248.142   Ready     2m

    kubernetes集群搭建完成。

    在k8s集群中創(chuàng)建pod,如果出現(xiàn)如下錯誤

    其中最主要的問題是:details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)

    解決方案:

    查看/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt (該鏈接就是上圖中的說明) 是一個軟鏈接,但是鏈接過去后并沒有真實的/etc/rhsm,所以需要使用yum安裝:

    yum install *rhsm*

    安裝完成后,執(zhí)行一下docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

    如果依然報錯,可參考下面的方案:

    wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm

    rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

     注釋:rpm2cpio命令用于將rpm軟件包轉換為cpio格式的文件

    cpio命令主要是用來建立或者還原備份檔的工具程序,cpio命令可以復制文件到歸檔包中,或者從歸檔包中復文件。          

               -i   還原備份檔  

               -v  詳細顯示指令的執(zhí)行過程

    這兩個命令會生成/etc/rhsm/ca/redhat-uep.pem文件.

    [root@k8s-node ~]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

    在master節(jié)點新建pod并查看起狀態(tài)為正常

    flannel是CoreOS提供用于解決Dokcer集群跨主機通訊的覆蓋網(wǎng)絡工具。它的主要思路是:預先留出一個網(wǎng)段,每個主機使用其中一部分,然后每個容器被分配不同的ip;讓所有的容器認為大家在同一個直連的網(wǎng)絡,底層通過UDP/VxLAN等進行報文的封裝和轉發(fā)。

    四、企業(yè)級k8s集群部署

    二進制包

    注:推薦用二進制包部署Kubernetes集群,雖手動部署麻煩,但可以學習很多工作原理利于后期維護。

    環(huán)境

    可以使用VMware虛擬機,宿主機必須8G內(nèi)存以上

    • 服務器可以訪問外網(wǎng),有從網(wǎng)上拉取鏡像的需求

    單Master服務器規(guī)劃:( 注:部署時候根據(jù)具體環(huán)境進行IP地址調整即可 )

    這里使用3臺組建集群,可容忍1臺機器故障,當然,你也可以使用5臺組建集群

    etcd1: 192.168.3.110 etcd2: 192.168.3.112 etcd3: 192.168.3.113

    cfssl是一個開源的證書管理工具,使用json文件生成證書,相比openssl更方便使用。

    找任意一臺服務器操作,這里用Master節(jié)點。

    創(chuàng)建工作目錄:

    自簽CA:

    生成證書:

    會生成ca.pem和ca-key.pem文件。

    創(chuàng)建證書申請文件:

    注:上述文件hosts字段中IP為所有etcd節(jié)點的集群內(nèi)部通信IP,一個都不能少!為了方便后期擴容可以多寫幾個預留的IP。

    生成證書:

    會生成etcd.pem和etcd-key.pem文件。

    https://github.com/etcd-io/etcd/releases/download/v3.5.1/ etcd-v3.5.1-linux-amd64.tar.gz

    以下在節(jié)點1上操作,然后將文件拷貝到其他集群機器

    把剛才生成的證書拷貝到配置文件中的路徑:

    注意修改節(jié)點2和節(jié)點3分別etcd.conf配置,按照下面提示的修改

    啟動各節(jié)點的etcd服務

    如果輸出上面信息,就說明集群部署成功。

    如果有問題看日志:/var/log/message

    docker二進制下載地址:

    https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz

    注:使用yum安裝也行

    集群所有機器都安裝docker

    生成證書:

    會生成ca.pem和ca-key.pem文件。

    創(chuàng)建證書申請文件:

    生成證書:

    會生成k8s.pem和k8s-key.pem文件。

    下載地址參考:

    https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md

    https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#downloads-for-v12013

    Wget https://dl.k8s.io/v1.20.13/kubernetes-server-linux-amd64.tar.gz

    把剛才生成的證書拷貝到配置文件中的路徑:

    TLS Bootstrapping 機制,對work-node加入進行自簽證書用

    創(chuàng)建上述配置文件中token文件:

    token 可以自行生產(chǎn),百度下怎么生產(chǎn)

    kube-apiserver服務

    生成kube-controller-manager證書:

    生成kubeconfig文件(以下是shell命令,直接在終端執(zhí)行):

    生成kube-scheduler證書:

    生成kubeconfig文件:

    生成kubeconfig文件:

    通過kubectl工具查看當前集群組件狀態(tài):

    在所有worker node創(chuàng)建工作目錄:

    從master節(jié)點拷貝:

    注:由于網(wǎng)絡插件還沒有部署,節(jié)點會沒有準備就緒 NotReady

    二進制包下載地址:https://github.com/containernetworking/plugins/releases

    確保kubelet啟用CNI:

    在Master執(zhí)行:

    應用場景:例如kubectl logs

    在Master節(jié)點將Worker Node涉及文件拷貝到新節(jié)點192.168.3.112/113

    注:這幾個文件是證書申請審批后自動生成的,每個Node不同,必須刪除

    Node2(192.168.3.113 )節(jié)點同上。記得修改主機名!

    訪問地址:https://NodeIP:30001

    創(chuàng)建service account并綁定默認cluster-admin管理員集群角色:

    使用輸出的token登錄Dashboard。

    CoreDNS用于集群內(nèi)部Service名稱解析。

    DNS解析測試:

    這樣 單Master集群就搭建完成了

    以上就是關于kubernetes部署相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。


    推薦閱讀:

    淘寶SKU圖片要求(淘寶sku圖片格式)

    運營中的sku是啥意思(運營中的sku是啥意思?。?/a>

    拼多多更改sku后流量起不來(拼多多更改sku后流量起不來怎么回事)

    平頂山居住區(qū)景觀設計(平頂山居住區(qū)景觀設計招聘)

    抖音賣水果的網(wǎng)紅排行榜(抖音賣水果的網(wǎng)紅排行榜前十名)