日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes集群的部署方式及详细步骤

發布時間:2023/12/18 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes集群的部署方式及详细步骤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、部署環境架構以及方式

第一種部署方式

1、針對于 master 節點

將 API Server、etcd、controller-manager、schedule各組件進行 yum install、編譯安裝或者展開安裝的方式手動直接安裝在 master 節點組機上,作為系統級守護進程運行。

2、針對于 node 節點

將 kube-proxy、kubelet、docker、flannel 各組件進行 yum install 或下載已預制好的二進制程序包手動安裝在 node 節點主機上,作為系統級守護進程運行。

此部署方式非常的繁瑣,出于安全方面的考慮,各組件之間通信都需要配置 CA 和證書。

注:此部署方式的缺點就是如果 master 宕機了,需要手動進行啟動這些系統級的守護進程。

第二種部署方式

由于第一種部署方式比較繁瑣,此次我們采用 kubernetes 工具進行部署,由 k8s 官方所提供的專門部署集群的管理工具。

每一個節點主機上包括 master 節點都要手動安裝并運行 docker ,同時也都要手動安裝并運行 kubelet。如果將第一個節點初始化為這個步驟,其實就是通過kubeadm 工具將 API? Server、etcd、controller-manager、scheduler 各組件運行為 Pod ,也就是跑在 docker 上。而其他 node 節點,因已經運行了 kubelet、docker 組件,剩下的 kube-proxy 組件也是要運行在 Pod 上。

kubelet:負責能運行 Pod 化容器的核心組件

docker:運行容器的引擎

但是以上 master 節點上的 Pod 都是靜態 Pod (static Pod),并不受 k8s 自身管理,只是運行為 Pod 形式而已,也可運行為自托管 Pod。

而 flannel 組件也是運行在 Pod 上的系統守護進程,起到各 node 節點通信作用。

以下是 flannel 簡單介紹:

https://blog.csdn.net/xuguokun1986/article/details/53119330

3、kubernetes 的介紹

在 GitHub 上 kubernetes 的介紹:

https://github.com/kubernetes/kubeadm

二、Kubernetes 集群的部署詳細步驟

(一)簡述部署流程

1、master、nodes 節點要先安裝 kuber、kubeadm 和 docker

2、在 master 節點上運行 kubeadm init 進程進行初始化集群

3、將各 node 節點加入集群中:kubeadm join

kubeadm 工作原理詳解見:https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.10.md(此文檔介紹的是k8s1.10版本)

(二)部署流程的詳細介紹

(1)master 節點環境安裝的準備工作

1、確保集群中的所有節點,服務器時間是同步的。設置詳情如下:

https://www.cnblogs.com/huhyoung/p/9657253.html

2、公司內部局域網的服務器可配置 hosts 文件進行域名解析

而云服務器需要另外考慮

注:阿里云服務器切記不要修改 hostname

3、關閉防火墻服務

需要注意的是,CentOS Linux 7 默認啟動了 firewalld(防火墻服務),而 Kubernetes 的 master 與工作 node 之間會有大量的網絡通信,安全的做法是在防火墻配置各組件需要相互用心的端口號。在一個安全的內部網絡環境中可以關閉防火墻服務:

[root@master ~]# systemctl disable firewalld [root@master ~]# systemctl stop firewalld

4、獲取軟件包

第一種部署方式獲取軟件包

源碼包獲取地址:https://github.com/kubernetes/kubernetes/releases

圖中紅色框的為源碼包,而 Kubernetes.tar.gz 不是源碼包,但包含所需的所有組件。建議下載官方預制好的,master、node 相關組件分別分開組建的包,點擊 CHANGELOG-1.11.md

點擊目錄?Downloads for v1.11.3跳轉到

不管是 master 和 node 都應該安裝服務端安裝包,像圖中的kubernetes-server-linux-amd64.tar.gz包,如果要進行交互,則需要安裝客戶端

第二種部署方式獲取軟件包

如果是 Cent OS ,建議使用 yum install 安裝,Google 官方已經將這些組件制成了 RPM 包,這些包需要 RPM 包生成器動態自動生成,所以不能下載到本地使用,只能通過在線倉庫進行安裝。

(2)master 節點環境的安裝

1、配置 yum 倉庫

先安裝 docker 鏡像,去阿里云官方鏡像網站:https://opsx.alibaba.com/mirror找到docker-ce對應的linux centos系統repo配置文件,右擊復制鏈接

?然后進入 /etc/yum.repos.d 目錄,下載到本地。

wget??https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

接著再生成 Kubernetes 的倉庫文件,創建并編輯 Kubernetes。repos 。  

[root@master yum.repos.d]# vim kubernetes.repo

寫入以下內容,baseur 和 gpgkey 的路徑可在阿里云官方鏡像網站 Kubernetes 目錄下找到。

[kubernetes] name=Kubernetes Repo baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg enabled=1

創建完之后,獲取當前系統有效的 repolist

[root@master yum.repos.d]# yum repolist

為了方便在 node 節點上安裝,可以將兩個配置文件通過 scp 命令復制到 node 節點服務器上。

[root@master yum.repos.d]# scp kubernetes.repo docker-ce.repo node1:/etc/yum.repos.d/

2.安裝各組件

kuberctl:API Server 的命令行客戶端

?

[root@master yum.repos.d]# yum install docker-ce kubelet kubeadm kubectl

可以看到加載到的是哪些版本的包

安裝到 cri-tools-1.11.1-0.x86_64包時提示gpgkey沒有安裝

將 yum-key.gpg 下載到本地進行 rpm --import 導入

發現還是報同樣的錯,于是順便也把 rpm 包的 key 也下載下來進行導入。

?wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

最后,都安裝成功了。

3、啟動 docker

啟動 docker 后,需要注意的是它會去 docker 倉庫下載所依賴到的每個鏡像文件,這些鏡像文件暫時獲取不到,建議將相關鏡像文件通過其他途徑下載到本地然后導入使用,或者推送到本地倉庫。

在這里我們是借用別人此前提供的一直路徑來獲取并下載使用,因此在啟動之前,需要編輯 vim /usr/lib/systemd/system/docker.service ,在該文件中定義一個環境變量。

注意NO_PROXY中間是有下劃線的。然后修改完配置文件之后需要重新加載配置文件,然后重新啟動,否則修改不會生效。

[root@master ~]# systemctl daemon-reload [root@master ~]# systemctl start docker

是否啟動成功用 docker info 查看一下,可以看出已經啟動成功了。

同時還要確保以下兩個參數值為1.通過網橋轉發的 IP 數據包會 iptables 規則過濾,而這兩個選項將阻止過濾,Netfilter 是默認情況下啟用了橋梁,如果不阻止會導致嚴重的混亂。

如果不是1需要修改為1

echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

通過?[root@master ~]# rpm -ql kubelet? 命令查看都安裝了什么文件

查看配置文件發現額外參數是空的

4、設置 kubelet、docker 為開機啟動

[root@master ~]# systemctl start kubelet [root@master ~]# systemctl status kubelet

這邊沒有明顯的錯誤提示,因此查看日志

[root@master ~]# tail /var/log/messages

[root@master ~]# systemctl stop kubelet #將kubelet關閉

因各個組件還未初始化完成所以不能啟動,將其設置開機啟動即可

[root@master ~]# systemctl enable kubelet #將其設置為開機啟動[root@master ~]# systemctl enable docker #將docker設置為開機啟動

5、kubeadm init 初始化

查看 kubeadm init 的幫助信息

[root@master ~]# kubeadm init --help

--apiserver-advertise-address:API服務器將通知它正在監聽的IP地址,監聽的地址為“0.0.0.0”,即本機所有IP地址。

--apiserver-bind-port:API服務器綁定到的端口。(默認:6443)

--cert-dir:加載證書的相關目錄(默認:/etc/kubernetes/pki)

--config:配置文件的路徑。警告:配置文件目前屬于實驗性,還不穩定。

--ignore-preflight-errors:將錯誤顯示為警告的檢查列表進行忽略。例如:“IsPrivilegedUser,Swp”。Value 'all'忽略所有檢查中的錯誤。

--pod-network-cidr:指定pod網絡的IP地址范圍。如果設置,控制平面將為每個節點自動分配CIDRs。

--service-cidr:為service VIPs使用不同的IP地址。(默認“10.96.0.0/12”)

然后我們指定選項進行初始化:

[root@master ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

如果初始化中碰到 swap 不支持的報錯,如下圖

需要做兩個設定

①[root@master ~]# vim /etc/sysconfig/kubelet #加入以下參數KUBELET_EXTRA_ARGS="--fail-swap-on=false"

②[root@master ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap #在初始化時加入--ignore選項最后通過
[root@master
~]# docker image ls 查看鏡像都拉取完了

其中 k8s.gcr.io/pause 就是基礎架構容器,可以不用啟動,其他容器將它當成每本進行網絡、存儲卷復制。

特別注意:

其中有兩個附件:CoreDNS 和 kube-proxy

CoreDNS : CoreDNS 已經經歷過三個版本:sky-dns() ----->kube-dns(1.3版本)--->CoreDNS(1.11版本)

kube-proxy:作為附件運行自托管與 k8s 之上,來幫忙負責生成 service 資源相關的 iptables 或者 ipvs 規則,在1.11 版本默認使用 ipvs。

6、創建 kube 目錄,添加 kubect 配置。

建議用普通用戶運行以下三個命令:

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

因不是生成環境,所以此處直接用 root 權限執行,第三部更改屬主和屬組也不需要操作

還未執行以上三個命令時,查看 nodes 節點是會報以下錯誤:

執行完之后,再查看 nodes 節點時,結果如下:

可以看出 master 的狀態是未就緒(NotReady),之所以是這種狀態是因為還缺少一個附件 flannel 或者 Calico,沒有網絡各 Pod 是無法通信的。

也可以通過檢查組建的健康狀態

[root@master ~]# kubectl get componentstatus #componentstatus可簡寫為cs

7、添加網絡組件(flannel)

組件 flannel 可以通過https://github.com/coreos/flannel中獲取,此處也有介紹怎么安裝

如果Kubernetes版本是1.7以上執行這行命令即可,在線自動獲取部署清單,然后基于此清單下載鏡像啟動并部署

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

看到很多東西被創建是還不夠的,還需要查看flannel是否處于正常啟動并運行的狀態,才算正在的部署完成。

[root@node1 ~]# docker image ls #查看flannel鏡像是否有被拉取下來

可以看到flannel鏡像已經下載下來了

[root@node1 ~]# kubectl get pods --all-namespaces #查看所有名稱空間的pod,同時可以看到flannel已經正常啟動[root@node1 ~]# kubectl get pods -n kube-system #查看名稱空間為kube-system的pod

[root@localhost ~]# kubectl get ns #查看有哪些名稱空間

系統級別的 Pod 都在名稱空間 kube-system 中

這樣我們的 master 節點部署好了

8、node 節點環境的安裝

[root@node01 ~]# rpm --import rpm-package-key.gpg[root@node01 ~]# yum install -y docker-ce kubelet kubeadm[root@master ~]# scp /usr/lib/systemd/system/docker.service node01:/usr/lib/systemd/system/docker.service[root@master ~]# scp /etc/sysconfig/kubelet node01://etc/sysconfig/ [root@node01 ~]# systemctl daemon-reload[root@node01 ~]# systemctl start docker[root@node01 ~]# systemctl enble docker kubelet[root@node01 ~]# kubeadm join 172.20.0.70:6443 --token jpy0lt.fxz77am8dgr4r93f --discovery-token-ca-cert-hash sha256:70b67aa60ebb2eef3e3e4f76e5278fc23e6972c1c4e0848d744b93caa6f9b6ec --ignore-preflight-errors=Swap

加入成功之后,等以下鏡像下載完之后這個 node 節點就 OK 了。

可以通過kubectl get pods -n kube-system -o wide查看flannel和proxy有兩個,一個在master節點上,一個在node01節點上。

?

轉載于:https://www.cnblogs.com/lwl117/p/11203604.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Kubernetes集群的部署方式及详细步骤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。