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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【02】Kubernets:使用 kubeadm 部署 K8S 集群

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【02】Kubernets:使用 kubeadm 部署 K8S 集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面的話

?

通過上一節,知道了 K8S 有 Master / Node 組成,但是具體怎么個組成法,就是這一節具體談的內容。概念性的東西我們會盡量以實驗的形式將其復現。

?

?

部署 K8S 集群

?

互聯網常用的 K8S 集群部署方式:

1. kubeadm(我們本次用到的)

2. rancher

3. 云服務商提供的(如阿里云提供的 K8S)

4. yum 安裝(版本有點低,不推薦)

?

準備:

IP主機名角色安裝
192.168.100.101node1Masterkubeadm/kubelet/kubectl/docker-ce/flannel
192.168.100.102node2Nodekubeadm/kubelet/kubectl/docker-ce/flannel
192.168.100.103node3Nodekubeadm/kubelet/kubectl/docker-ce/flannel

準備 3 臺初始化的機器,內存大于 2G。

至于 kubeadm 文檔如下,感興趣的可以去看看:

https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.10.md

?

【1】所有節點初始化操作:

# 配置主機名解析 echo "192.168.100.101 node1" >>/etc/hosts echo "192.168.100.102 node2" >>/etc/hosts echo "192.168.100.103 node3" >>/etc/hosts# 關閉防火墻 systemctl stop firewalld systemctl disable firewalld# 取消 swap swapoff -a# 配置 ipvs echo 'net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1' > /etc/sysctl.d/k8s.conf# 使配置生效 modprobe br_netfilter sysctl -p /etc/sysctl.d/k8s.conf# kube-proxy 配置 ipvs echo 'modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4' >> /etc/sysconfig/modules/ipvs.modules# 生效配置 chmod 755 /etc/sysconfig/modules/ipvs.modules bash /etc/sysconfig/modules/ipvs.modules lsmod | grep -e ip_vs -e nf_conntrack_ipv4# 時間同步 yum -y install ntpdate ntpdate cn.pool.ntp.org echo "*/20 * * * * /usr/sbin/ntpdate cn.pool.ntp.org" >> /var/spool/cron/root

簡單的做個說明,上面的步驟是每個節點都需要進行的初始化操作,屬于必須進行了。第一個主機名解析需要根據自己的實際情況進行一定量的修改。關閉防火墻是為了保證我們的通信能夠正常完成。至于開啟 ipvs 我們在上一節提到過,在 K8S 1.11 版本以后,系統的負載均衡調度選用的是 ipvs 規則,能夠提高我們集群的性能。如果你不配置 ipvs,可能還會使用 iptables 規則,這不是我們想要看到的。

值得注意的是,時間同步在 docker 和 K8S 集群中都特別重要,所以一定要保證時間與互聯網時間同步,否則可能導致莫名其妙的 BUG,如:鏡像拉取失敗,報錯:

x509: certificate has expired or is not yet valid

?

【2】所有節點都安裝配置 docker:

# 卸載舊版本 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine# 安裝依賴 yum install -y yum-utils device-mapper-persistent-data lvm2 bridge-utils bash-completion wget# 配置阿里 yum 源 cd /etc/yum.repos.d wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安裝 docker yum -y install docker-ce

配置 docker 阿里云下載加速:(這里的加速地址是網友的,如果你想用自己的,可以去阿里云搞一個,具體就不詳細說明了,網上很多)

mkdir -p /etc/docker echo '{"registry-mirrors": ["https://eyg9yi6d.mirror.aliyuncs.com"] }' > /etc/docker/daemon.json

啟動 docker:

systemctl enable docker systemctl start docker docker version

我這里 docker 版本為:?18.09.6

?

【3】所有節點都配置 K8S 源并安裝 K8S:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

安裝 K8S 并設置開機啟動,但是先不啟動

yum makecache fast yum install -y kubelet kubeadm kubectl
systemctl enable kubelet

我們這里安裝 K8S 版本為:v1.14.2

?

【4】節點下載鏡像:

由于國內網絡的原因,K8S 的鏡像站是連接不上的,需要手動去下載,這里有個我寫的腳本,修改成你的 K8S 版本就行(K8S_VERSION):

#!/bin/bash################################################################# # 作者:Dy1an <1214966109@qq.com> # 日期:2019-05-23 # 作用:下載 K8S 相關鏡像 ################################################################################################################################## # 系統相關變量 ################################################################# LINE="===================================================================" MY_REGISTRY=registry.cn-hangzhou.aliyuncs.com/openthings K8S_VERSION="v1.14.2"################################################################# # 拉取鏡像 ################################################################# echo ${LINE} echo "Pull Kubernetes ${K8S_VERSION} Images from aliyuncs.com ......" echo ${LINE} docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-apiserver:${K8S_VERSION} docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-controller-manager:${K8S_VERSION} docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-scheduler:${K8S_VERSION} docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-proxy:${K8S_VERSION} docker pull ${MY_REGISTRY}/k8s-gcr-io-etcd:3.3.10 docker pull ${MY_REGISTRY}/k8s-gcr-io-pause:3.1 docker pull ${MY_REGISTRY}/k8s-gcr-io-coredns:1.3.1################################################################# # 修改 tag ################################################################# echo ${LINE} echo "Change Kubernetes ${K8S_VERSION} Images tags ......" echo ${LINE} docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-apiserver:${K8S_VERSION} k8s.gcr.io/kube-apiserver:${K8S_VERSION} docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-scheduler:${K8S_VERSION} k8s.gcr.io/kube-scheduler:${K8S_VERSION} docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-controller-manager:${K8S_VERSION} k8s.gcr.io/kube-controller-manager:${K8S_VERSION} docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-proxy:${K8S_VERSION} k8s.gcr.io/kube-proxy:${K8S_VERSION} docker tag ${MY_REGISTRY}/k8s-gcr-io-etcd:3.3.10 k8s.gcr.io/etcd:3.3.10 docker tag ${MY_REGISTRY}/k8s-gcr-io-pause:3.1 k8s.gcr.io/pause:3.1 docker tag ${MY_REGISTRY}/k8s-gcr-io-coredns:1.3.1 k8s.gcr.io/coredns:1.3.1################################################################# # 提示完成 ################################################################# echo ${LINE} echo "Pull Kubernetes ${K8S_VERSION} Images FINISHED." echo ${LINE}

在每臺機器上面執行腳本,下載完成后查看鏡像:

docker images

結果如圖:

?

【5】Master 主節點初始化:

在初始化之前,我們需要插播一個知識點,那就是 K8S 網絡,先看個圖:

在 K8S 集群中,我們主要會提到 3 個網絡:

1. 節點網絡:很好理解,就是每臺機器的真實 IP 地址,比如:192.168.100.101,該 IP 稱作 Node IP

2. Pod 網絡:K8S 管理的最小單位是 Pod,我們可以把 Pod 就看成一個 docker 容器,這個 IP 就像容器的 IP,稱作 Pod IP。?

3. Service 網絡:前兩 IP 都會配置到? Pod 或網卡,但是這個不會,若多個 Pod 組成一個 Service,這個 IP 就像統一入口。至于 Service,之后會詳講。該 IP 稱作 Cluster IP

當然還有其他網絡,比如 pod 和 pod 之間通信的隧道?Overlay(疊加)網絡。以及 Pod 內部容器間通過 lo 網卡通信的網絡。這些都不需要我們去關注。只需要記住上面的 3 個就行。

?

為了實現這樣復雜的網絡結構,我們引入了網絡插件,常見的插件有以下幾種:

1. flannel:簡單易用,但不支持網絡策略。通過配置本地網絡協議棧實現給本機 Pod 配置 IP。

2. project calico:支持網絡策略和網絡配置,默認基于 BGP 網絡實現直接通信。

3. canel:flannel 和 calico 結合,flannel 提供網絡,calico 提供策略。

?

基于上面的知識點,我們再來初始化我們的集群,并定義了兩個服務網段:

# 添加配置 echo 'KUBELET_EXTRA_ARGS="--fail-swap-on=false"' > /etc/sysconfig/kubelet# 初始化主節點 kubeadm init --kubernetes-version=v1.14.2 --pod-network-cidr=10.1.0.0/16 --service-cidr=10.96.0.0/12

結果如圖:

從初始化節點打印的東西我們可以看到:

1. 系統初始化安裝了兩個附件:kube-proxyCoreDNS(就是 kube-dns)。

2. 我們需要手動執行這個 3 個命令才算真正完成主節點初始化。

3. Node 節點加入集群的命令,需要我們記錄下來。?

執行后續操作:

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

查看集群狀態:

kubectl get cs

結果如圖:?

查看節點信息:

kubectl get nodes

結果如圖:

此時可以看到,主節點的狀態是 NotReady 的,原因是還沒有配置 flannel

注意:如果出現錯誤,我們可以通過?/var/log/messages 查看日志。

安裝 flannel 網絡插件,項目地址:

https://github.com/coreos/flannel

?執行命令在線安裝:

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

結果如圖:

此時再度查看節點狀態:

kubectl get nodes

結果如圖,已經變成 Ready 狀態:?

查看當前運行的 Pod:

kubectl get pods -n kube-system

結果如圖:

這里專門指定了名稱空間,如果不指定,會發現默認的名稱空間中什么也沒有。可以查看下名稱空間:

kubectl get ns

結果如圖:

至此,主節點配置基本完成,接下來配置 Node 節點!至于這些命令,之后會單獨講解。

?

【6】Node 節點初始化:

# 添加配置 echo 'KUBELET_EXTRA_ARGS="--fail-swap-on=false"' > /etc/sysconfig/kubelet# 加入集群 kubeadm join 192.168.100.101:6443 --token no4hr8.4xv9xjyt9dxwqinq --discovery-token-ca-cert-hash sha256:239675f2ccb9e700ea1a60b8ff019672ea1a98c1f66ad6a81972cb5ec7d4f381

結果如圖:

主節點查看結果:容器啟動需要一定的時間(1-2分鐘),所以直接查看可能出現 NotReady 的情況,這是正常的。

主節點上查看運行的詳細信息:

kubectl get pods -n kube-system -o wide

結果如圖:-o wide 查看詳細信息!

可以看到,kube-proxykube-flannel 在其他節點上都有運行。

這里我們得再強調一件事情,除了開始加入節點的命令我們得去 Node 從節點執行,后續的命令我們都是在 Master 節點完成的,由此可以看出 Master 節點的重要性。

到此,K8S 簡單的集群搭建完成!?

?

?

小結

?

整個部署過程中最麻煩的就是鏡像下載以及鏡像版本之間的兼容性。我們推薦使用相對成熟的版本部署我們的應用。因為我這里是測試,所以就選用的最新穩定版。

主要的過程就像這些,看著很復雜,其實大多都說貼命令的過程。后續如果感興趣,其實完全可以寫成腳本,讓他一鍵部署。

轉載于:https://www.cnblogs.com/Dy1an/p/10812263.html

總結

以上是生活随笔為你收集整理的【02】Kubernets:使用 kubeadm 部署 K8S 集群的全部內容,希望文章能夠幫你解決所遇到的問題。

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