-
當前位置:首頁 > 創(chuàng)意學院 > 技術(shù) > 專題列表 > 正文
kubernetes部署(Kubernetes部署容器群集一般首選()了網(wǎng)絡(luò))
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于kubernetes部署的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、Kubernetes 部署 MongoDB 集群
編寫 mongo.yaml 文件,提供了一個對外暴露的 NodePort 類型的 Service,用于外部訪問。
啟動命令 kubectl create -f mongo.yaml 。
執(zhí)行 mongo.yaml 文件成功,如下所示:
提供了對外暴露的服務(wù) mongo-service ,可通過 主機:NodePort的端口 的方式訪問。
使用 curl http://172.18.232.207:30741 測試連接 MongoDB 。
其中 172.18.232.207 為 k8s 集群的主機(任一主機), 30741 為 mongo-service 服務(wù)的 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集群機器關(guān)閉防火墻
[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設(shè)置開機啟動并驗證狀態(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服務(wù)的配置文件
[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"
設(shè)置開機啟動,開啟服務(wù)
[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查看服務(wù)端口:
[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=""
設(shè)置開機啟動、開啟服務(wù)
[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軟件包轉(zhuǎn)換為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)絡(luò)工具。它的主要思路是:預先留出一個網(wǎng)段,每個主機使用其中一部分,然后每個容器被分配不同的ip;讓所有的容器認為大家在同一個直連的網(wǎng)絡(luò),底層通過UDP/VxLAN等進行報文的封裝和轉(zhuǎn)發(fā)。
四、企業(yè)級k8s集群部署
二進制包
注:推薦用二進制包部署Kubernetes集群,雖手動部署麻煩,但可以學習很多工作原理利于后期維護。
環(huán)境
可以使用VMware虛擬機,宿主機必須8G內(nèi)存以上
• 服務(wù)器可以訪問外網(wǎng),有從網(wǎng)上拉取鏡像的需求
單Master服務(wù)器規(guī)劃:( 注:部署時候根據(jù)具體環(huán)境進行IP地址調(diào)整即可 )
這里使用3臺組建集群,可容忍1臺機器故障,當然,你也可以使用5臺組建集群
etcd1: 192.168.3.110 etcd2: 192.168.3.112 etcd3: 192.168.3.113
cfssl是一個開源的證書管理工具,使用json文件生成證書,相比openssl更方便使用。
找任意一臺服務(wù)器操作,這里用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服務(wù)
如果輸出上面信息,就說明集群部署成功。
如果有問題看日志:/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服務(wù)
生成kube-controller-manager證書:
生成kubeconfig文件(以下是shell命令,直接在終端執(zhí)行):
生成kube-scheduler證書:
生成kubeconfig文件:
生成kubeconfig文件:
通過kubectl工具查看當前集群組件狀態(tài):
在所有worker node創(chuàng)建工作目錄:
從master節(jié)點拷貝:
注:由于網(wǎng)絡(luò)插件還沒有部署,節(jié)點會沒有準備就緒 NotReady
二進制包下載地址:https://github.com/containernetworking/plugins/releases
確保kubelet啟用CNI:
在Master執(zhí)行:
應(yīng)用場景:例如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集群就搭建完成了
以上就是關(guān)于kubernetes部署相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
拼多多更改sku后流量起不來(拼多多更改sku后流量起不來怎么回事)
平頂山居住區(qū)景觀設(shè)計(平頂山居住區(qū)景觀設(shè)計招聘)
抖音賣水果的網(wǎng)紅排行榜(抖音賣水果的網(wǎng)紅排行榜前十名)