centos7使用kubeadm搭建k8s集群(包含解決公網部署的辦法)


1、前言

本篇內容所參考資料

本篇文章部署的k8s版本為1.18.0,1.20.x版本以上部署時會略有問題,建議新手不要更換版本安裝
關於公網部署的解決方案,在 3.1.1 小節

2、所有機器都需要執行的命令(master 和 node 都要執行)

2.1 關閉防火牆

systemctl stop firewalld

2.2 關閉 selinux

setenforce 0 

2.3 關閉 swap

swapoff -a

2.4 將橋接的IPV4流量傳遞到iptables 的鏈

vi /etc/sysctl.d/k8s.conf

粘貼以下內容

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

2.5 安裝docker (如果有docker則可以直接跳過)

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl start docker
systemctl enable docker

2.6 同步時間

yum install ntpdate -y
ntpdate cn.pool.ntp.org

2.7 添加k8s的阿里yum源

vi /etc/yum.repos.d/kubernetes.repo

粘貼以下內容

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

2.8 安裝 kubeadm 、 kubectl 和 kubelet

yum makecache fast
yum install -y kubectl-1.18.0 kubeadm-1.18.0 kubelet-1.18.0 --nogpgcheck

3、master機器上執行

3.1 kubeadm執行初始化

首先你要先用 ifconfig 命令查看一下自己這台master機器的ip地址是多少

注意是看 eth0 這塊網卡的信息
然后將ip替換到下列命令當中(只改 ip ,其余的均不用變化)

kubeadm init --apiserver-advertise-address=192.168.0.4 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

這個過程會比較久,因為這一步需要下載好幾個docker鏡像,並且運行起來。
待操作成功后,你能看到如下信息打印就表示成功(這條語句記得復制出來,后面要在node機器上執行他)

3.1.1 公網部署的辦法

上面3.1執行 kubeadm init 的時候,使用的是局域網 ip。公網部署,就是要把這個ip寫成你的公網ip,然后執行 kubeadm init --apiserver-advertise-address=119.29.178.140 ......
等 kubeadm init 命令執行后出現以下內容時

這時候去修改一下 etcd.yaml ,改一下監聽地址配置
打開一個新的linux遠程窗口,修改一下 etcd.yaml 的配置

vim /etc/kubernetes/manifests/etcd/yaml


改完之后慢慢等 kubeadm init 命令執行完就好了

因為etcd.yaml原配置監聽的地址是公網地址,所以會導致etcd的容器運行失敗,也就會導致kubelet運行錯誤。但是把etcd.yaml改完之后,這時k8s發現etcd容器啟動失敗問題后會自動重試,按照修改后的etcd.yaml重新創建新的etcd的容器去運行。

概括而言,公網部署主要問題就是在於etcd的監聽有問題,所以只是需要改一下etcd的配置就行,然后node機器就可以通過公網ip去join master機器。

3.2 必須執行這幾句,不然上面執行的無效

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

3.3 安裝flannel

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

3.4 這時候查看 k8s 的節點信息。因為master節點其實自己也算一個node節點,所以這個時候就已經是能看集群的情況如何

kubectl get node


看見 Ready 就表示正常,但如果出現了 NoReady ,稍等幾分鍾,等他自己刷新狀態

4、node節點執行

node節點加入集群的操作,就是把master節點執行 3.1 部分操作得到的結果,那句 kubeadm join 命令復制到 node 節點執行就可以了
如果這個命令你忘了,或者是token已經過期,則可以重新再生成一個 (token有效期為24小時,過期就要重新生成)

4.1 手動生成 kubeamd join 命令(以下操作均在master機器上執行)

4.1.1 獲取有效的 token

首先可以先查看有沒有沒過期還能用的token

kubeadm token list


畫紅色框框的就是token
列表里展示的就是還沒過期的token,這種情況下,你就不用直接生成新token,可以繼續使用
但是如果沒有可以用的token,則可以使用以下命令獲取新的token

kubeadm token create


紅色框里的就是新生成出來的 token

4.1.2 獲取ca證書sha256編碼hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'


紅色框中的就是這個 hash 值

4.1.3 最后把 4.1.1 和 4.1.2 的值拼接到下面這個 kubeadm join 命令中(關於ip填什么,局域ip部署的master就填master機器的局域網ip,公網ip部署的就填master機器的公網ip)

kubeadm join 這里替換ip:6443 --token 這里替換token --discovery-token-ca-cert-hash sha256:這里替換hash值

4.2 把master機器的 /etc/kubernetes/admin.conf 文件拷貝到 node 節點機器

命令里替換一下你自己的node機器IP地址,然后在master機器上執行

scp /etc/kubernetes/admin.conf root@你的node機器ip地址:/etc/kubernetes/

復制文件過去后,接着在node機器執行以下命令

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

這時候你就可以查看一下node節點是否已經加入到集群

kubectl get node


如果node節點在里面的狀態是 NoReady ,這時候不要慌,等幾分鍾他刷新好狀態后再看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM