K8S的漫長之路:部署K8S集羣。

首先的話
爲什麼說K8S是一個漫長之路吧。因爲我是一個小白,在搭建K8S的時候,總是會遇到很多很多的問題。每一個問題的解決的話,都是非常的喫力的。
目前我遇到的問題,
1 沒有全局的意識,容易出錯
2 身邊沒有老師,如果出現問題的話,只能百度
3 服務器是一個問題。
A 選擇本地VMware 3臺 可以先弄3G的內存來試試
B 買兩條8G的內存條 大概500塊錢
C 選擇阿里雲的服務器 月租 A學生服務器9.5每月 BCD 1核心2G內存1M帶寬 82.6元 3臺的話,大概250元每月
綜合選擇的話,先選VMware的不夠的話再加內存。
現在機器的問題暫時解決了。(每一個問題對於我而言都是大問題,因爲我真的是小白)。
現在的話,心裏遇到一些挑戰。就是如果跟着視屏學習的話,就是典型的複製粘貼了。這個的速度非常慢,而且成就感是比較低。所以的話,第一步是建議是先複製粘貼,然後再自己做一遍,這樣纔有成就感,而且還能寫一下自己的心得。
步驟開始

1 先用finalshell連接主機

2 關閉firewalld,selinux,(iptables沒有設定)(3臺都要)

3 設置時間同步

date 顯示格式 周幾 月 日 時間 CST 年,Tue週二 Dec12月,
如果不能同步的話,可以用重啓chronyd服務,達到同步網絡時間的效果。

4 做本地的域名解析

5 需要禁止swap

,不然做K8S的時候會出錯,出錯的也可以設置可以使用swap,
查看內核版本的話可以用uname -a 和 cat /proc/verrsion。內核的話,也是一個模塊。也可以到/usr/lib/module/下查看到的也是一個內核。

6 啓動ipvs的內核模塊

,這個模塊跟網絡有關係。可以這樣理解,內核中也是有很多模塊的,有一些模塊的功能是沒有使用的,如果要用的話,需要去安裝和使用。內核先關可以到這個目錄下查找/usr/lib/modules/3.10.0-957.el7.x86_64/kernel/net/netfilter/ipvs 這個目錄是ipvs的模塊位置。每個節點都要。
啓用ipvs模塊的方法。
vim /usr/lib/modules/ipvs.modules

 #!/bin/bash
 ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"    #獲取模塊的地址
for mod in $(ls $ipvs_mods_dir |grep -o "^[^.]*"); #grep -o 只輸出符合的字符。簡單的理解這個正則吧,    ^表示開頭  [^.]* 表示不是.並且是多個的。因爲grep匹配字符的時候,是從左到右的。所以的話,這個grep的話,就是取.之前開頭的字段。
do
    /sbin/modinfo -F filename $mod &> /dev/null   #modinfo會顯示kernel模塊的對象文件,以顯示該模塊的相關信息。   上面是查看模塊的完整路徑信息的
    if[$? -eq 0];then  #判斷模塊是否執行成功
       /sbin/modprobe $mod   #modprobe可載入指定的個別模塊,或是載入一組相依的模塊。modprobe會根據depmod所產生的相依關係,決定要載入哪些模塊。若在載入過程中發生錯誤,在modprobe會卸載整組的模塊。
    fi
 done .
 #來總結一下
 1 ipvs裏面是有很多模塊
 2 然後用modprode來載入模塊就行了。

chmod a+x /usr/lib/modules/ipvs.modules
./usr/lib/modules/ipvs.modules

來一遍grep的複習。

7 安裝程序包

1 使用阿里雲docker.ce版本的源
A docker 的阿里雲源 http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
B cd /etc/yum.repos.d/
C wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2 把master的公鑰給node1和node2
3 把master做好master的源scp到node1和node2下。
4 yum安裝docker-ce(各個節點)
如果出現安裝錯誤的話,可能是本地廠庫和互聯網廠庫的問題,就是我們剛剛在用來阿里雲的docker源,那麼安裝docker的時候自然也會用阿里雲的廠庫,本地程序的話,就會用本地的廠庫,這個應該是我一個問題的盲區吧。我猜的話,就是安裝docker的話,就是用阿里雲的倉庫,因爲是使用yum安裝,所以的話,就會安裝一些依賴項,有些依賴項的話,是使用系統的基本參考的,所以造成一個不兼容或者是版本的問題,解決這個問題就是就是把系統基本源改成阿里雲的源就行了。

8啓動docker,(3臺都要)

1 啓動docker的時候配置一下配置文件
vim /usr/lib/systemd/system/docker.service #啓動docker的時候會啓動這個文件。

Environment="HTTPS_PROXY=http://www.ik8s.io:10070"  #這個添加一個HTTPS_PROXY,不懂這個代理有什麼用,親測試過這個代理網絡是訪問不了的。
Environment="NO_PROXY=127.0.0.1/8,172.18.0.0/16"   #訪問這些網絡的時候,不需要經過代理。  127.0.0.1/8表示本機的網絡。
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT  # -P, --policy chain target制定鏈表的策略(ACCEPT|DROP|REJECT)
ExecReload=/bin/kill -s HUP $MAINPID

2 啓動docker
systemctl daemon-reload
systemctl start docker
docker info 查看docker的信息
iptable -vnL 查看iptables的規則,是否對docker的影響
[root@master system]# sysctl -a |grep bridge

net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-ip6tables = 1  #這個參數要爲1
net.bridge.bridge-nf-call-iptables = 1   #這個參數要爲1
net.bridge.bridge-nf-filter-pppoe-tagged = 0
net.bridge.bridge-nf-filter-vlan-tagged = 0
net.bridge.bridge-nf-pass-vlan-input-dev = 0
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.docker0.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"

如果上面兩個參數不是爲1,要手動添加(每臺都是一樣)
vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1  #這個參數要爲1
net.bridge.bridge-nf-call-iptables = 1   #這個參數要爲1

[root@master system]# sysctl -p /etc/sysctl.d/k8s.conf 執行之後開機啓動之後會加載
3 設置開機自啓動docker(三臺都要)
4 創建k8s的源廠庫,
[root@node2 yum.repos.d]# vim /etc/yum.repos.d/k8s.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/    #基本URL
enabled=1    #設置開機自啓動
gpgcheck=1   #開啓GPG檢查
repo_gpgcheck=1 #源GPG檢查
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg   #gpgkey路徑   在寫源的時候,不能寫備註,不然無法檢測出來。

yum repolist
yum list |grep ‘^kube’ 可以查具體可以安裝那些kube開頭的包
yum -y install kubeadm kubectl kubelet 安裝K8S的相關組件,
如果安裝的時候出現gpgkey報錯,可以使用命令:
yum install -y --nogpgcheck kubelet kubeadm kubectl 安裝,可以免gpgkey驗證安裝
rpm -ql kubectl kubelet kubeadm 查看每個組件的相關文件,比如配置文件。
[root@master ~]# vim /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--fail-swap-on=false"   #設置允許運行swap

kubeadm -h 查看kebuadm命令的 使用

Usage:
  kubeadm [command]  

Available Commands:
  alpha       Kubeadm experimental sub-commands
  completion  Output shell completion code for the specified shell (bash or zsh)
  config      Manage configuration for a kubeadm cluster persisted in a ConfigMap in the cluster
  help        Help about any command
  init        Run this command in order to set up the Kubernetes control plane  #master初始化使用
  join        Run this on any machine you wish to join an existing cluster        #添加節點使用
  reset       Performs a best effort revert of changes made to this host by 'kubeadm init' or 'kubeadm join'   #重置的時候使用
  token       Manage bootstrap tokens
  upgrade     Upgrade your cluster smoothly to a newer version with this command
  version     Print the version of kubeadm

[root@master ~]# kubeadm config print init-defaults 多使用幫助來熟悉命令的 使用。來顯示默認的配置。

kubernetesVersion: v1.17.0    # 可以知道K8S的版本是1.17
serviceSubnet: 10.96.0.0/12   # 可以知道服務的子網爲10.96.0.0/12 ,子網掩碼爲12
imageRepository: k8s.gcr.io   #K8S默認指定的廠庫

K8S有3個network,包括 service network 和pod network 和node network。
1 node network 目前不是很理解node network
2 service network:默認是serviceSubnet: 10.96.0.0/12,從中動態分配。
3 pod k8s會提供CNI,網絡接口,需要用第三方來分配網絡,
第三方的網絡有:
1 flannel,默認的是網絡是10.244.0.0/16 也可以自定義,部署K8S和flannel的網絡要一致。
2 calico,定義的網絡是192.168.0.0/16

[root@master ~]# kubeadm init -h

--pod-network-cidr string     #通過這個參數來修改pod-network
--kubernetes-version string    #通過這個參數來修改K8S的默認版本
--config string                #通過這個參數來指定使用配置文件,但是配置文件
得自己修改,並且裏面的service network和K8S 都是可以直接定義的。
--dry-run                      #第一次跑的話,可以用這個參數
--image-repository             #可以指定其他的鏡像廠庫

9 master節點初始化

出現的錯誤: [ERROR Swap]: running with swap on is not supported. Please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=…
就是要執行初始化的時候,要加ignore-preflight-errors=Swap ,來允許Swap。
[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=…
意思就是初始化K8S至少要2核心,如果要用1核心啓動話,可以加參數ignore-preflight-errors=
1 執行master初始化
[root@master ~]# kubeadm init --pod-network-cidr=“10.244.0.0/16” --kubernetes-version=“v1.17.0” --dry-run --ignore-preflight-errors=Swap
–dry-run 只是跑測試跑一下,並沒有執行。
2 查看k8s初始化需要拉取的鏡像
[root@master ~]# kubeadm config images list
3 先來去K8S初始化需要的鏡像
[root@master ~]# kubeadm config images pull
1 遇到鏡像拉取不了的問題,docker拉取鏡像的話,應該是去gitlab的公共廠庫拉取鏡像的。
2 到這裏的話我就弄不下去了
3 試一下用docker加速器能不能解決上面的問題。問題不能解決,換一種思路來學習。
4 初始化之後按照提示來執行一些命令,創建一些命令吧

10 部署pod network網絡清單。

需要到GitHub查到命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章