6.0 k8s(ubuntu版)-Kubernetes安裝

3.0 k8s-Kubernetes高可用部署(上)——部署前準備

1. 安裝docker

仍然以masterServer1服務器爲例,5臺服務器都需要運行。

當然可以一臺服務器安裝好後,再做其他4個快照,但作爲能看我這些文章的嗎,大概都是初學者,因此按我當下的想法,就同樣的安裝方法自己安裝5次,熟悉好過程。

Docker從17.03開始分爲企業版(EE)與社區版(CE),社區版並非閹割版,而是改了個名稱;企業版則提供了一些收費的高級特性。

EE版本維護期1年;CE的stable版本三個月發佈一次,維護期四個月;另外CE還有edge版,一個月發佈一次。

1.1 如果過去安裝過 docker,先刪掉
apt-get remove docker docker-engine docker.io containerd runc

參考輸出

root@masterServer1:~# apt-get remove docker docker-engine docker.io containerd runc
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package docker-engine
root@masterServer1:~# 
1.2 安裝curl gnupg2 software-properties-common apt-transport-https ca-certificates
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

參考輸出:

root@masterServer1:~# apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
......
Scanning processes...                                                                                
Scanning linux images...                                                                             

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
root@masterServer1:~#

PS:

  • docker當年的實現:被拆分出了幾個標準化的模塊,標準化的目的是模塊是可被其他實現替換的,不由任何一個廠商控制。
    docker由 docker-client ,dockerd,containerd,docker-shim,runc組成,所以containerd是docker的基礎組件之一

  • 調用鏈
    Docker 作爲 k8s 容器運行時,調用關係如下:
    kubelet --> docker shim (在 kubelet 進程中) --> dockerd --> containerd
    Containerd 作爲 k8s 容器運行時,調用關係如下:
    kubelet --> cri plugin(在 containerd 進程中) --> containerd

  • containerd.io : 守護進程 containerd。 它在 docker 包上獨立工作,並且是 docker 包所必需的。
    containerd 可用作 Linux 和 Windows 的守護程序。 它管理其主機系統的完整容器生命週期,從圖像傳輸和存儲到容器執行和監督,再到低級存儲到網絡附件等等。

  • docker-ce-cli : docker 引擎的命令行界面,社區版

  • docker-ce : docker 引擎,社區版。 需要 docker-ce-cli

1.3 安裝GPG證書

信任Docker的GPG公鑰

# (華爲源,推薦)
curl -fsSL https://repo.huaweicloud.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
# 或者(阿里雲)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
# 或者(Docker官方)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg

參考輸出:

root@masterServer1:/etc/apt/trusted.gpg.d# curl -fsSL https://repo.huaweicloud.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
root@masterServer1:/etc/apt/trusted.gpg.d# 
1.4 寫入軟件源信息

對於amd64架構的計算機,添加軟件倉庫:

# (華爲源,推薦)
add-apt-repository "deb [arch=amd64] https://repo.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 或者(阿里雲)
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 或者(Docker官方)
 add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 對於樹莓派或其它Arm架構計算機,請運行:
echo "deb [arch=armhf] https://repo.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

參考輸出:

root@masterServer1:/opt/kubernetes/docker# add-apt-repository "deb [arch=amd64] https://repo.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
Repository: 'deb [arch=amd64] https://repo.huaweicloud.com/docker-ce/linux/ubuntu jammy stable'
Description:
Archive for codename: jammy components: stable
More info: https://repo.huaweicloud.com/docker-ce/linux/ubuntu
Adding repository.
Press [ENTER] to continue or Ctrl-c to cancel.# 這裏按回車鍵

Adding deb entry to /etc/apt/sources.list.d/archive_uri-https_repo_huaweicloud_com_docker-ce_linux_ubuntu-jammy.list
Adding disabled deb-src entry to /etc/apt/sources.list.d/archive_uri-https_repo_huaweicloud_com_docker-ce_linux_ubuntu-jammy.list
Hit:1 https://repo.huaweicloud.com/ubuntu jammy InRelease
Hit:2 https://repo.huaweicloud.com/ubuntu jammy-updates InRelease
Hit:3 https://repo.huaweicloud.com/ubuntu jammy-backports InRelease
Hit:4 https://repo.huaweicloud.com/ubuntu jammy-security InRelease
Get:5 https://repo.huaweicloud.com/docker-ce/linux/ubuntu jammy InRelease [48.9 kB]
Get:6 https://repo.huaweicloud.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages [9632 B]
Fetched 58.5 kB in 2s (35.5 kB/s) 
Reading package lists... Done
root@masterServer1:/opt/kubernetes/docker# 

1.5 更新索引文件並安裝Docker
apt-get install docker-ce

參考輸出docker版:

root@masterServer1:/opt/kubernetes/docker# apt-get update
Hit:1 https://repo.huaweicloud.com/ubuntu jammy InRelease
......
Reading package lists... Done
root@masterServer1:/opt/kubernetes/docker# apt-get install docker-ce
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
......
Scanning processes...                                                      
Scanning linux images...                                                   

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
root@masterServer1:/opt/kubernetes/docker# 

本質上,我們直接安裝containerd即可,但這裏是安裝docker,優先按docker方案來。

containerd安裝方案(本案例未執行)
apt-get update
#安裝containerd
apt install -y containerd.io
#生成containetd的配置文件
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
# 配置 containerd 用systemdcgroup啓動,修改cgroup Driver爲systemd
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
# 重啓和啓用
systemctl restart containerd
systemctl enable containerd

因爲這是演示安裝示例,這裏我們直接安裝docker完整包。
參考輸出containerd版:

root@masterServer1:/opt/kubernetes/docker# apt-get update
Hit:1 https://repo.huaweicloud.com/ubuntu jammy InRelease
Hit:2 https://repo.huaweicloud.com/ubuntu jammy-updates InRelease
Hit:3 https://repo.huaweicloud.com/ubuntu jammy-backports InRelease
Hit:4 https://repo.huaweicloud.com/ubuntu jammy-security InRelease
Hit:5 https://repo.huaweicloud.com/docker-ce/linux/ubuntu jammy InRelease
Reading package lists... Done
root@masterServer1:/opt/kubernetes/docker# apt install -y containerd.io
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
......
Scanning processes...                                                      
Scanning linux images...                                                   

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
root@masterServer1:/opt/kubernetes/docker# containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
root@masterServer1:/opt/kubernetes/docker# sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
root@masterServer1:/opt/kubernetes/docker# systemctl enable containerd
root@masterServer1:/opt/kubernetes/docker#

將鏡像源設置爲阿里源 google_containers 鏡像源
華爲源沒找到。

(阿里源)
sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml

參考輸出:

root@masterServer1:~# sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
root@masterServer1:~#
1.6 設置爲開機啓動
systemctl enable docker

參考輸出:

root@masterServer1:/opt/kubernetes/docker# systemctl enable docker
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
root@masterServer1:/opt/kubernetes/docker# 
1.7 設置參數
1.7.1 查看磁盤掛載
df -h

參考輸出:

root@masterServer1:/opt/kubernetes/docker# df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              393M  732K  392M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   15G  6.1G  7.9G  44% /
tmpfs                              2.0G     0  2.0G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  127M  1.7G   7% /boot
tmpfs                              393M  4.0K  393M   1% /run/user/0
root@masterServer1:/opt/kubernetes/docker# 
1.7.2 設置docker啓動參數
  • 設置docker數據目錄:選擇比較大的分區(我這裏是/,默認爲/var/lib/docker)

  • 設置cgroup driver(默認是cgroupfs,主要目的是與kubelet配置統一,這裏可以不設置後面在kubelet中指定cgroupfs)

mkdir -p /library/dock-data
# 以下代碼一次執行
cat <<EOF >/etc/docker/daemon.json
{
 "graph":"/library/dock-data"
}
EOF

參考輸出:

root@masterServer1:/opt/kubernetes/docker# mkdir -p /library/dock-data
root@masterServer1:/opt/kubernetes/docker# cat <<EOF >/etc/docker/daemon.json
{
 "graph":"/library/dock-data"
}
EOF
root@masterServer1:/opt/kubernetes/docker# 

重新啓動docker服務

service docker restart

參考輸出:

root@masterServer1:/opt/kubernetes/docker# service docker restart
root@masterServer1:/opt/kubernetes/docker# 

2. 安裝必要工具(所有節點)

仍然以masterServer1服務器爲例,5臺服務器都需要運行。

2.1 工具說明
  • kubeadm: 部署集羣用的命令
  • kubelet: 在集羣中每臺機器上都要運行的組件,負責管理pod、容器的生命週期
  • kubectl: 集羣管理工具(可選,只要在控制集羣的節點上安裝即可)

2.2 安裝方法

1、備份/etc/apt/sources.list.d/kubernetes.list文件:

cp /etc/apt/sources.list.d/kubernetes.list /etc/apt/sources.list.d/kubernetes.list.bak

2、修改/etc/apt/sources.list.d/kubernetes.list文件:

# (華爲源,推薦)
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb https://repo.huaweicloud.com/kubernetes/apt/ kubernetes-xenial main
EOF
# (阿里源)
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

3、添加kuberneteskey
ubuntu-server 22.04以上安裝命令和華爲源官方阿里源官方不一樣。

具體解決方案來源於Install Docker Engine on Ubuntu (在 Ubuntu 上安裝 Docker 引擎)

# (華爲源,推薦)
curl -s https://repo.huaweicloud.com/kubernetes/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# (阿里源)
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4、更新索引文件並安裝kubernetes

apt update
apt install -y kubeadm kubelet kubectl
 apt-mark hold kubelet kubeadm kubectl
#apt-mark 用於將軟件包標記/取消標記爲自動安裝。 hold 選項用於將軟件包標記爲保留,以防止軟件包被自動安裝、升級或刪除。

參考輸出:

root@masterServer1:~# apt update
Hit:1 https://repo.huaweicloud.com/ubuntu jammy InRelease
......
Fetched 70.8 kB in 2s (28.8 kB/s) 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
1 package can be upgraded. Run 'apt list --upgradable' to see it.
W: https://repo.huaweicloud.com/kubernetes/apt/dists/kubernetes-xenial/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
root@masterServer1:~# apt install -y kubeadm kubelet kubectl
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
.....
Scanning processes...                                                                                      
Scanning linux images...                                                                                   

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
root@masterServer1:~# apt-mark hold kubelet kubeadm kubectl
kubelet set on hold.
kubeadm set on hold.
kubectl set on hold.
root@masterServer1:~# systemctl enable kubelet && systemctl start kubelet 
root@masterServer1:~# 

`

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