K8S-K8S 環境搭建


新手搭建K8S 

環境准備 

通過vmware 准備系統為centos7 的虛機三台 。(一台也可以,后面在克隆虛機也可以)安裝vmware 虛機過程就不寫了比較基礎。

准備環境配置網絡   我選擇橋接模式。配置靜態ip ,靜態ip 可以ping通外網。(橋接模式下dhcp 獲取的地址,我們取和他同一網段的地址配置給我們虛機就好了,確保取地址是未被使用的可以通過ping 檢查)

我准備三台vm 的地址規划

master   192.168.0.50

node1    192.168.0.51  

node2    192.168.0.52

 

吸引准備好后 對環境的設置

修改主機名

hostnamectl set-hostname    +主機名

配置主機網絡

[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33-1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.0.50
PREFIX=24
GATEWAY=192.168.0.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b1cac983-ca12-4acb-8e88-638e9ecda874
DEVICE=ens33
ONBOOT=yes

 

設置域名解析

[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.50 master
192.168.0.51 node1
192.168.0.52 node2

 

手動修改 selinux 配置文件,設置永久關閉(需要重啟動機器)

vi /etc/selinux/config

SELINUX=enforcing改為SELINUX=disabled

關閉iptables

systemctl stop iptables

systemctl disable iptables

關閉防火牆

systemctl stop firewalld

systemctl disable firewalld

 

檢查server 是否可以ping 通外網  可以通過ping  www.baidu.com 

 

 

准備安裝docker 

添加aliyun 的yum 源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

檢查yum 源,此時出現的出來我們本機的yum 源 應該會多一個docker 的yum 源

yum makecache

 

安裝docker

yum install -y docker-ce 

 

啟動docker 服務

systemctl start docker

systemctl enable docker

 

驗證docker 是否ok,結果如下

docker run hello-world

 

如果提示docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #0:: error running hook: exit status 2, stdout: , stderr: fatal error: runtime: out of memory

是虛機的內存不夠,擴內存可以解決此問題我虛機是給了1G 擴至2G解決此問題

 

 

 

docker 是安裝K8S 的前提,確保docker 的可用性我們在安裝K8S 

網絡使用的goofle 的K8S yum 源國內用不了,我們需要切換成阿里的yum 源

在 /etc/yum.repos.d/ 目錄下生產一個K8S 的yum 源

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

 

執行yum makecache 檢查

 

 

k8s 所需的組件: kubelet  kubeadm  kubectl

Kubelet   是運行在所有cluster  節點上的負責啟動pod 和容器

Kubeadm   用於初始化cluster

Kubectl   K8S 的命令行工具,用於管理和部署應用,負責查看、刪除、創建 和更新組件

 

安裝K8S 需要的組件  (所有節點上安裝)

 

yum install -y kubelet kubeadm kubectl

 

可以使用kubectl version kubelet --version kubeadm version驗證是否安裝成功 

 

如果做到這里如果大家使用的是一台虛機,現在可以將虛機克隆 需要幾個node 節點克隆幾個就可以了 然后修改ip   hostname 即可

 

master 節點的操作

初始化master 節點

 kubeadm init --pod-network-cidr=192.168.10.0/16  --apiserver-advertise-address=192.168.0.50  

 

由於國內網絡原因 在獲取鏡像會超時會提示如下報錯

 

 

在根據網絡上添加阿里雲的鏡像時雖然會減少鏡像下載報錯但是還是有問題

 

 

 

 

 

 

我們使用以下方法來徹底解決此問題

原文鏈接https://blog.csdn.net/weixin_43168190/article/details/107227626

在初始化master 時候會有提示讓我們是使用 'kubeadm config images pull' 來提前知道image 的版本

 

 

 

我們直接從DockerHub的其它倉庫拉取

https://hub.docker.com/search?q=kube-proxy&type=image 

 

 

 

選取一個訪問量最多的倉庫來使用

編寫下載鏡像的腳本

[root@master ~]# cat pull_k8s_images.sh

set -o errexit

set -o nounset

set -o pipefail

 

##這里定義版本,按照kubeadm config images pull 獲取到的版本填寫對應的版本號

 

KUBE_VERSION=v1.21.2

KUBE_PAUSE_VERSION=3.4.1

ETCD_VERSION=3.4.13-0

DNS_VERSION=1.8.0

 

##這是原始倉庫名,最后需要改名成這個

GCR_URL=k8s.gcr.io

 

##這里就是寫你要使用的倉庫

DOCKERHUB_URL=k8smx

 

##這里是鏡像列表,新版本要把coredns改成coredns/coredns

images=(

kube-proxy:${KUBE_VERSION}

kube-scheduler:${KUBE_VERSION}

kube-controller-manager:${KUBE_VERSION}

kube-apiserver:${KUBE_VERSION}

pause:${KUBE_PAUSE_VERSION}

etcd:${ETCD_VERSION}

coredns/coredns:${DNS_VERSION}

)

 

##這里是拉取和改名的循環語句

for imageName in ${images[@]} ; do

  docker pull $DOCKERHUB_URL/$imageName

  docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName

  docker rmi $DOCKERHUB_URL/$imageName

done

 

 

 

執行腳本就可以下載對應的鏡像並給鏡像改成對應的名稱

bash pull_k8s_images.sh

 

 

 

 

這里我們提示我們倉庫coredns鏡像下載失敗

我們可以倉庫搜索關鍵字來尋找我們所需對應的版本image

 

 

docker pull coredns/coredns:1.8.0

 

 

給鏡像改名,因為我們需要的鏡像信息是k8s.gcr.io/coredns/coredns:v1.8.0

docker tag coredns/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0

 

 

 

 

master 節點上執行初始化

 

 

最總結果記錄這些信息

 

 

根據最總結果的提示執行相關命令

 

 

查看相關節點的pod 信息  (pending 是正常的 正在啟動搭建pod 最后會變成running 狀態)

kubectl get pod -n kube-system

 

查看node 節點列表信息當前狀態是NotReady

 

 

 

節點列表中狀態為NotReady,是因為You should now deploy a pod network to the cluster,也就是需要在集群中部署一個pod network,上面的運行結果里寫到:

 

 

登錄到https://kubernetes.io/docs/concepts/cluster-administration/addons/ 選擇flannel 網絡

 

 

 

flannel 中的目錄下進入documentation 目錄選擇kube-flannel.yml點擊raw 會獲取到下載flannel.yml 文件的路徑  (如果跳轉過去沒有信息顯示沒有關系復制http 的路徑就可以了)

https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

 

 

使用wget 下載flannel文件      失敗原因是我們虛機無法解析到這個域名ip

wget url --no-check-certificate https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

 

 

 

我需要知道這個raw.githubusercontent.com 對應的ip 地址

搜素nslookup 使用工具查找

 

 

 

 

 

添加域名解析

 

 

再次wget 下載 wget url --no-check-certificate https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

 

 

加載文件

kubectl apply -f kube-flannel.yml

 

 

在檢查node 狀態已經是ready 狀態了

 

 

Node 節點的部署

Node1 執行kubeadm join 192.168.0.50:6443 --token mp4ghu.k3wx612pnxtj27ys \

>         --discovery-token-ca-cert-hash sha256:cbf3766f4563a35ebc4c0e85e2629abd7b09615462cc2164932365512cf2c56e  (之前初始化成功狗有此命令)

 

 

 

Node2 同上

 

master 檢查新加入的node 節點

kubectl get nodes

 

 

部署參照了https://blog.csdn.net/weixin_43168190/article/details/107227550?spm=1001.2014.3001.5501

 

 

目前node1 node2 節點顯示狀態時NotReady 很明顯有問題。

檢查pod 信息發現flannel pod 節點異常

 

kubectl describe pod kube-flannel-ds-5rdhb -n kube-system

 

 

 

 

 

登錄報錯的node 節點查詢log 

 

 

 

發現一直報網絡的問題 還有提示我們下載k8s.gcr.io/pause:3.4.1失敗 。

 

針對此問題我將環境中master 下載鏡像腳本cp 過來將下載了所有的鏡像。

 

正對network 問題,我將master 上的flanner image 保存下來另cp node節點上,在node 上重新加載。 

 

[root@master ~]#  docker save -o flannel.tar quay.io/coreos/flannel:v0.14.0

 

 

 

[root@master ~]# scp -r flannel.tar 192.168.0.52:/root/

 

flannel.tar                                                                                                                                                                  100%   66MB  99.6MB/s   00:00

 

 

 

[root@master ~]# scp -r flannel.tar 192.168.0.51:/root/

 

flannel.tar                                                                                                                                                                  100%   66MB  99.6MB/s   00:00

 

 

 

node 節點上執行docker load  -i flannel.tar

 

 

檢查pod 信息,flannel 還是異常的

 

 

 

 

 

 

 

手動刪除有問題的pod ,系統會自己重新在拉一個pod

kubectl delete pod kube-flannel-ds-p2ktn -n kube-system 

查看pod 返現問題已經被恢復 ,另一個node的同理。

 

 

 

 

 

 

檢查node 狀態都是ready

 

 

 

驗證

下載nginx 的鏡像

docker pull nginx 

 

 

 

 

 

創建一個pod

kubectl create deployment nginx --image=nginx 

 

 

 

 

 

將端口映射出去

kubectl expose deployment nginx --port=80 --type=NodePort

 

 

查詢

kubectl get pods,svc

 

 

 

Pod 已經被運行在node2 節點上了,訪問node2 ip+端口31830 可以訪問nginx 界面

 

 

 

 

 

 


免責聲明!

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



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