1 minute read

本次安装使用Ubuntu20.4作为服务器系统,kubernetes版本为v1.24.1,容器运行时使用containerd。请参考kubernetes舍弃dockershim的原因。

https://kubernetes.io/zh/blog/2022/04/07/upcoming-changes-in-kubernetes-1-24/

节点初始化

hostnamectl set-hostname master
其他节点使用node作为hostname,本次实验只有一个master节点

更改以后修改/etc/hosts文件,让hostname正确解析

127.0.0.1 localhost master
sudo ufw status
如果未开启防火墙提示: Status: inactive
sudo ufw disable
Firewall stopped and disabled on system startup 防火墙关闭成功提示
sestatus  /  getenforce
查看selinux状态
关闭selinux
vi /etc/selinux/config
SELINUX=disabled
Ubuntu默认关闭selinux,启动selinux需要安装selinux才可以
swapoff -a
临时关闭swap分区
vi /etc/fstab
#swap……
永久关闭swap分区

systectl启动内核模块以及更改设置

启动verlay和br_netfilter模块

sudo modprobe overlay && sudo modprobe br_netfilter

为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中 将 net.bridge.bridge-nf-call-iptables 设置为 1

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4_ip.forward = 1 
EOF

sudo systctl --system

安装kubeadm kubectl kubelet

sudo apt update
sudo apt upgrade -y

升级软件版本以及内核版本,升级完成后需要重启服务器

安装依赖项,准备安装kubeadm组件

sudo apt install curl apt-transport-https -y

添加国内k8s源

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF 
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

下载kubernetes组件

sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl && sudo apt-mark hold kubelet kubeadm kubectl

apt-mark hold 保留现在的版本不自动升级

安装容器运行时

https://github.com/containerd/containerd/blob/main/docs/getting-started.md

容器运行时需要安装runc与cni插件,在安装的时候选择使用官方二进制文件。如果选择下面的第二种选项,需要注意的是并未安装CNI插件,可以手动安装。

containerd

$ tar Cxzvf /usr/local containerd-1.6.2-linux-amd64.tar.gz
bin/
bin/containerd-shim-runc-v2
bin/containerd-shim
bin/ctr
bin/containerd-shim-runc-v1
bin/containerd
bin/containerd-stress

通过system启动containerd,将该文件放在/usr/lib/systemd/system/containerd.service中。containerd.service

sudo systemctl daemon-reload
sudo systemctl enable containerd --now

runc

$ install -m 755 runc.amd64 /usr/local/sbin/runc

CNI plugin

$ mkdir -p /opt/cni/bin
$ tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz

使用system cgroup驱动程序

结合 runc 使用 systemd cgroup 驱动,在 /etc/containerd/config.toml 中设置

生成配置文件:

sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

vi /etc/containerd/config.toml

# 把配置文件中的 flase 修改为 true
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true

用国内源替换 containerd 默认的 sand_box 镜像

[plugins]
  .....
  [plugins."io.containerd.grpc.v1.cri"]
  	...
	sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.5"
# 注意自己的pause版本,如果对不上可能会导致集群初始化失败

配置镜像加速器地址

[plugins."io.containerd.grpc.v1.cri".registry]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  # 添加下面两个配置
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://ekxinbbh.mirror.aliyuncs.com"]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
      endpoint = ["https://gcr.k8s.li"]

重启containerd

sudo systemctl daemon-reload
sudo systemctl restart containerd
ctr version

初始化集群

在初始化开始之前检查kubeadam组件以及容器运行时是否正常,以及是否启动了kubelet。我这里是单台机器做的,多台机器相同操作。

sudo kubeadm init --pod-network-cidr 172.16.0.0/16 \
--apiserver-advertise-address=192.168.56.130 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

flannel网络插件

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

vi kube-flannel.yml

# 找到行“--kube-subnet-mgr”,在其下增加如下一行,用真实网卡名称替换eth0
- --iface=eth0

# 更改network地址与初始化地址保持一致
  net-conf.json: |
    {
      "Network": "172.16.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
kubectl apply -f ./kube-flannel.yml
kubectl get pods -n kube-system

Updated:

Leave a comment