环境:在 VMWare 上,启动了两个 Ubuntu 24.04.3 LTS,配置都为 2C2G。一台作为 master,一台作为 worker,需要为两台机器设置不同的 hostname。
Prepare
安装好 Docker 后,设置一下 cgroup 的驱动:
1
2
3
4
5
6
7
8
| cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": { "max-size": "100m" },
"storage-driver": "overlay2"
}
EOF
|
然后重启 docker:
1
2
3
| sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
|
为了让 Kubernetes 能够检查、转发网络流量,需要修改 iptables 的配置,启 用 br_netfilter 模块:
1
2
3
4
5
6
7
8
9
10
11
| cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
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 # better than modify /etc/sysctl.conf
EOF
sudo sysctl --system
|
修改“/etc/fstab”,关闭 Linux 的 swap 分区,提升 Kubernetes 的性能:
1
2
| sudo swapoff -a
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
|
安装 kubeadm
1
2
3
4
5
6
7
8
| sudo apt install -y apt-transport-https ca-certificates curl
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt update
|
然后安装 kubeadm、kubelet、kubectl:
1
2
3
4
| sudo apt install -y kubeadm=1.23.3-00 kubelet=1.23.3-00 kubectl=1.23.3-00
# 最好使用 apt-mark hold 锁定版本
sudo apt-mark hold kubeadm kubelet kubectl
|
kubeadm 把 apiserver、etcd、scheduler 等组件都打包成了镜像,以容器的方式启动 Kubernetes。使用命令 kubeadm config images list 可以查看安装 Kubernetes 所需的镜像列表,参数 --kubernetes-version 可以指定版本号:
1
| kubeadm config images list --kubernetes-version v1.23.3
|
最好先想办法把列出的镜像下到本地。
安装 Master 节点
kubeadm 安装 master 节点非常简单,只需要指定一下几个参数:
--pod-network-cidr:设置集群里 Pod 的 IP 地址段--apiserver-advertise-address:设置 apiserver 的 IP 地址,可以指定 apiserver 在哪个网卡上对外提供服务--kubernetes-version:指定 Kubernetes 的版本号
1
2
3
4
| sudo kubeadm init \
--pod-network-cidr=10.10.0.0/16 \
--apiserver-advertise-address=192.168.10.210 \
--kubernetes-version=v1.23.3
|
完成后,它会提示接下来要干什么:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.116.129:6443 --token e7m92u.o3namkgyg9f5n3qw \
--discovery-token-ca-cert-hash sha256:8d15d3ef5536d14706b8efba99b760212a61eccb3a18c179c307045bcea4e950
|
首先拷⻉ kubectl 的配置文件:
1
2
3
| mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
完成后,运行 kubectl get node 会发现 master 节点的 STATUS 为 NotReady,这是因为我们还没有添加网络插件,集群的内部网络还没有正常运作。
安装 Fannel 网络插件
保存 https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml ,然后运行修改其中的 net-conf.json 字段把 Network 改成之前参数 --pod-network-cidr 设置的地址段:
1
2
3
4
5
6
7
| net-conf.json: |
{
"Network": "10.10.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
|
然后
1
| kubectl apply -f kube-flannel.yml
|
稍等一会儿 master 节点的状态就变为了 Ready。
Flannel 所处的命名空间在 kube-flannel 中,可以通过 kubectl get pods -n kube-flannel 查看插件是否运行成功
安装 Worker 节点
安装好了 master 节点后,worker 节点只需要执行:
1
2
| sudo kubeadm join 192.168.116.129:6443 --token e7m92u.o3namkgyg9f5n3qw \
--discovery-token-ca-cert-hash sha256:8d15d3ef5536d14706b8efba99b760212a61eccb3a18c179c307045bcea4e950
|
它会连接 master 节点,然后拉取镜像,安装网络插件,最后把节点加入集群。
如果需要重新显示 join 信息,可以运行:
1
| sudo kubeadm token create --print-join-command
|
安装完后,执行 kubectl get node,就会看到两个节点都是“Ready”状态。
碰到的小问题
之前在安装网络插件时,会碰到安装完毕后 master 节点的状态始终还是“NotReady”,然后试着把 $HOME/.kube 目录删掉,然后:
sudo kubeadm reset- 重新
kubeadm init - 重新安装 Fannel 插件
就 ok 了~