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:~# 

`

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