【雲原生 | 從零開始學 Kubernetes】二、使用 kubeadm 搭建 K8S 叢集
安裝要求
-
兩臺或者多臺機器,為 centos7
-
2GB 及以上記憶體,2 個 CPU 及以上,硬碟 30G
-
叢集中所有機器之間網路互通
-
可以訪問外網
-
禁止 swap 分割槽
kubeadm 是官方社群推出的一個用於快速部署 kubernetes 叢集的工具。
準備環境
初始化
首先,我們要在三臺機子上做一些操作。關閉防火牆,selinux,swap,設定主機名,ip 解析,時間同步。
# 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
# 關閉selinux
# 永久關閉
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 臨時關閉
setenforce 0
# 關閉swap
# 臨時
swapoff -a
# 永久關閉
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 根據規劃設定主機名【master節點上操作】
hostnamectl set-hostname k8smaster
# 根據規劃設定主機名【node1節點操作】
hostnamectl set-hostname k8snode1
# 根據規劃設定主機名【node2節點操作】
hostnamectl set-hostname k8snode2
# 在master新增hosts
vim /etc/hosts
192.168.11.139 k8smaster
192.168.11.140 k8snode1
192.168.11.141 k8snode2
# 將橋接的IPv4流量傳遞到iptables的鏈
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 生效
sysctl --system
# 時間同步
yum install ntpdate -y
ntpdate time.windows.com
複製程式碼
安裝 Docker/kubeadm/kubelet
首先配置一下 Docker 的阿里 yum 源
vim /etc/yum.repos.d/docker.repo
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=http://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/docker-ce/linux/centos/gpg
複製程式碼
然後 yum 方式安裝 docker
# yum安裝
yum -y install docker-ce
# 檢視docker版本
docker --version
# 啟動docker
systemctl enable docker
systemctl start docker
複製程式碼
配置 docker 的映象源
vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://b9pmyelo.mirror.aliyuncs.com"]
}
複製程式碼
然後重啟 docker
新增 kubernetes 軟體源 三臺機子
然後我們還需要配置一下 yum 的 k8s 軟體源
<code data-type="codeline">vim /etc/yum.repos.d/kubernetes.repo</code><code data-type="codeline">[kubernetes]</code><code data-type="codeline">name=Kubernetes</code><code data-type="codeline">baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64</code><code data-type="codeline">enabled=1</code><code data-type="codeline">gpgcheck=0</code><code data-type="codeline">repo_gpgcheck=0</code><code data-type="codeline">gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg</code>
複製程式碼
安裝 kubeadm,kubelet 和 kubectl
由於版本更新頻繁,這裡指定版本號部署
# 安裝kubelet、kubeadm、kubectl,同時指定版本
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 設定開機啟動
systemctl enable kubelet
複製程式碼
部署 Kubernetes Master
在 192.168.177.139 執行,也就是 master 節點
kubeadm init \
--apiserver-advertise-address=192.168.11.139 \ # 當前主機ip
--image-repository registry.aliyuncs.com/google_containers \ # 映象
--kubernetes-version v1.18.0 \ # 版本
--service-cidr=10.96.0.0/12 \ # 這個引數後的IP地址直接就套用10.96.0.0/12 ,以後安裝時也套用即可,不要更改
--pod-network-cidr=10.244.0.0/16 #k8s內部的pod節點之間網路可以使用的IP段,不能和service-cidr寫一樣,如果不知道怎麼配,就先用這個10.244.0.0/16
複製程式碼
由於預設拉取映象地址 k8s.gcr.io 國內無法訪問,這裡指定阿里雲映象倉庫地址,我們 docker images 命令即可檢視已經拉取的映象。
當我們出現下面的情況時,表示 kubernetes 的映象已經安裝成功 然後用裡面提示的命令
使用 kubectl 工具
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 nodes
複製程式碼
能夠看到,目前有一個 master 節點已經運行了,但是還處於未準備狀態
下面我們還需要在 Node 節點執行其它的命令,將 node1 和 node2 加入到我們的 master 節點上
加入 Kubernetes Node
下面我們需要到 node1 和 node2 伺服器,執行下面的程式碼向叢集新增新節點
執行在 kubeadm init 輸出的 kubeadm join 命令:
注意,以下的命令是在 master 初始化完成後,每個人的都不一樣!!!需要複製自己生成的
kubeadm join 192.168.11.139:6443 --token oheovn.apns356uiesu58pa \
--discovery-token-ca-cert-hash sha256:fff629d1ea3a0f082a23a94965adbcc30159b3b9fc50743300f7d75b9653a4be
複製程式碼
預設 token 有效期為 24 小時,當過期之後,該 token 就不可用了。這時就需要重新建立 token,操作如下:
kubeadm token create --print-join-command
複製程式碼
當我們把兩個節點都加入進來後,我們就可以去 Master 節點 執行下面命令檢視情況
kubectl get node
複製程式碼
部署 CNI 網路外掛 master
上面的狀態還是 NotReady,下面我們需要網路外掛,來進行聯網訪問
# 下載網路外掛配置
wget http://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
複製程式碼
預設映象地址無法訪問,sed 命令修改為 docker hub 映象倉庫。
# 新增
kubectl apply -f http://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 檢視狀態 【kube-system是k8s中的最小單元】
kubectl get pods -n kube-system
複製程式碼
執行完成後,我們檢視狀態可以發現,已經變成了 Ready 狀態了
如果上述操作完成後,還存在某個節點處於 NotReady 狀態,可以在 Master 將該節點刪除
# master節點將該節點刪除
#20210223 yan 查閱資料新增###kubectl drain k8snode1 --delete-local-data --force --ignore-daemonsets
kubectl delete node k8snode1
# 然後到k8snode1節點進行重置
kubeadm reset
# 重置完後在加入
kubeadm join 192.168.11.139:6443 --token oheovn.apns356uiesu58pa \
--discovery-token-ca-cert-hash sha256:fff629d1ea3a0f082a23a94965adbcc30159b3b9fc50743300f7d75b9653a4be
複製程式碼
測試 kubernetes 叢集
我們都知道 K8S 是容器化技術,它可以聯網去下載映象,用容器的方式進行啟動
在 Kubernetes 叢集中建立一個 pod,驗證是否正常執行:
# 下載nginx 【會聯網拉取nginx映象】
kubectl create deployment nginx --image=nginx
# 檢視狀態
kubectl get pod
複製程式碼
如果我們出現 Running 狀態的時候,表示已經成功運行了
下面我們就需要將埠暴露出去,讓其它外界能夠訪問
# 暴露埠
kubectl expose deployment nginx --port=80 --type=NodePort
# 檢視一下對外的埠
kubectl get pod,svc
複製程式碼
能夠看到,我們已經成功暴露了 80 埠 到 31865 了
我們到我們的宿主機瀏覽器上,訪問如下地址
http://192.168.177.130:30529/
複製程式碼
發現我們的 nginx 已經成功啟動了
到這裡為止,我們就搭建了一個單 master 的 k8s 叢集
寫在最後
創作不易,如果覺得內容對你有幫助,麻煩給個三連關注支援一下我!如果有錯誤,請在評論區指出,我會及時更改!
目前正在更新的系列:從零開始學 k8s
感謝各位的觀看,文章摻雜個人理解,如有錯誤請聯絡我指出~
- 那些 Go 語言發展歷史上的重大決策
- 從趨勢到挑戰,一站式解讀作業系統運維和可觀測性
- 百萬級 Topic,騰訊雲的 Apache Pulsar 穩定性實踐
- Apache Doris 在思必馳的應用優化實踐:海量語音通話資料下,實時、離線一體的數倉架構設計實踐
- 愛數正式開源認知智慧開發框架 KWeaver
- 運維智慧化的三大關鍵技術
- “抄我的還‘反捅’我一刀”,Gary Marcus 發文駁斥圖靈獎得主 Yann LeCun
- 當出海成為必選項,企業如何構建全場景全生態技術底座?
- 數智底座必備能力三:快速構建創新應用
- Docker 多階段構建實戰 (multi-stage builds)
- 工作筆記之 SELECT 語句在 SAP ABAP 中的用法總結(上)
- 經久不衰的設計定律是不要讓我思考的設計
- 不要指望下一個像 GPT 這樣的大型語言模型會民主化
- Java 近期新聞:Helidon Níma、Spring Framework、MicroProfile、MicroStream、Kotlin 和 Piranha
- 一文入門 jQuery
- C 學習 ---__libc_open 函式的原理
- 監控系統工作原理
- 甲骨文新微服務框架 Helidon Níma:使用虛擬執行緒實現高效能
- 【雲原生 | 從零開始學 Kubernetes】二、使用 kubeadm 搭建 K8S 叢集
- Elasticsearch 聚合學習之四:結果排序