searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

树莓派搭建 K8s 集群 - Part 2 K8s 安装

2024-05-30 03:12:56
7
0

更改主机名

由于 K8s 使用主机名来区分集群里的节点,所以每个节点的 hostname 必须不能重名。你需要修改 /etc/hostname 这个文件,把它改成容易辨识的名字,比如我的三台树莓派名称分别为 rpi1 rpi2 rpi3。

sudo vi /etc/hostname

同样更改下 /etc/hosts 文件:

将文件中的

127.0.0.1   raspberry

更改为

127.0.0.1   rpi1

修改 Docker 配置

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

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

设置流量转发

修改 iptables 的配置,启用 br_netfilter 模块,让 K8s 可以检查和转发网络流量。

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

关闭 Linux Swap 分区

基于安全性(如在官方文档中承诺的 Secret 只会在内存中读写,不会落盘)、利于保证节点同步一致性等原因,从 1.8 版开始,Kubernetes 就在它的文档中明确声明了它默认不支持 Swap 分区,在未关闭 Swap 分区的机器中,集群将直接无法启动。

注意:下面这个方法在树莓派上不起作用!!:

sudo swapoff -a
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab

正确的方法是修改 /etc/dphys-swapfile 文件,将 CONF_SWAPSIZE 修改为 0:

# set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=0

完成以上操作后,最好重启下系统。

安装 Kubeadm

master 节点和 woker 节点都需要安装

kubeadm 可以直接从 Google 自己的软件仓库下载安装,但国内的网络不稳定,很难下载成功,需要改用其他的软件源:

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

使用 apt 安装 kubeadm、kubelet 和 kubectl 这三个安装必备工具。apt 默认会下载最新版本,在这里我们选择的版本是 1.23.3:

sudo apt install -y kubeadm=1.23.3-00 kubelet=1.23.3-00 kubectl=1.23.3-00

安装完成之后,你可以用 kubeadm version、kubectl version 来验证版本是否正确

kubeadm version
kubectl version --client

按照 Kubernetes 官网的要求,我们最好再使用命令 apt-mark hold ,锁定这三个软件的版本,避免意外升级导致版本错误:

sudo apt-mark hold kubeadm kubelet kubectl

安装 Master 节点

sudo kubeadm init \
  --image-repository registry.aliyuncs.com/google_containers \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=192.168.1.10 \
  --kubernetes-version=v1.23.3 \
  --v=5

解释下这里的几个参数:

  • –-image-repository:从阿里云服务器上拉取上面需要的基础镜像,如果不设置,就得去 Google 服务器拉取像
  • -–pod-network-cidr:指定 Pod 网络的范围。Flannel 网络插件需要使用
  • --apiserver-advertise-address:指定 api-server 的 IP 地址,如果有多张网卡,请明确选择哪张网卡。由于 apiserver 在 Kubernetes 集群中有很重要的地位,很多配置(如 ConfigMap 资源等)都直接存储了该地址,后续更改起来十分麻烦,所以要慎重
  • -–kubernetes-version:指定 Kubernetes 版本
  • --v=5:显示详细的跟踪日志

安装过程会持续一会儿,显示以下内容时,安装成功:

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.1.10:6443 --token gse06a.mlxg2efk9ite96an \
	--discovery-token-ca-cert-hash sha256:d41a56ec057ab750b54e1edbbf5d11097ba5364d9015ade6259f2632856b7cd9

安装 Flannel 网络插件

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

安装 Worker 节点

Master 节点安装成功后,会显示以下命令,在 Worker 节点执行即可加入 K8s 集群:

kubeadm join 192.168.1.10:6443 --token gse06a.mlxg2efk9ite96an \
	--discovery-token-ca-cert-hash sha256:d41a56ec057ab750b54e1edbbf5d11097ba5364d9015ade6259f2632856b7cd9

默认 token 的有效期为24小时,当 token 过期之后,需要重新生成 token:kubeadm token create --print-join-command

常见错误

  • 执行 kubeadm init 时报错:[ERROR SystemVerification]: missing required cgroups: memory

    将以下内容添加到 /boot/cmdline.txt 末尾,并重启系统:

    cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
    
0条评论
0 / 1000
r****n
3文章数
0粉丝数
r****n
3 文章 | 0 粉丝
r****n
3文章数
0粉丝数
r****n
3 文章 | 0 粉丝
原创

树莓派搭建 K8s 集群 - Part 2 K8s 安装

2024-05-30 03:12:56
7
0

更改主机名

由于 K8s 使用主机名来区分集群里的节点,所以每个节点的 hostname 必须不能重名。你需要修改 /etc/hostname 这个文件,把它改成容易辨识的名字,比如我的三台树莓派名称分别为 rpi1 rpi2 rpi3。

sudo vi /etc/hostname

同样更改下 /etc/hosts 文件:

将文件中的

127.0.0.1   raspberry

更改为

127.0.0.1   rpi1

修改 Docker 配置

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

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

设置流量转发

修改 iptables 的配置,启用 br_netfilter 模块,让 K8s 可以检查和转发网络流量。

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

关闭 Linux Swap 分区

基于安全性(如在官方文档中承诺的 Secret 只会在内存中读写,不会落盘)、利于保证节点同步一致性等原因,从 1.8 版开始,Kubernetes 就在它的文档中明确声明了它默认不支持 Swap 分区,在未关闭 Swap 分区的机器中,集群将直接无法启动。

注意:下面这个方法在树莓派上不起作用!!:

sudo swapoff -a
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab

正确的方法是修改 /etc/dphys-swapfile 文件,将 CONF_SWAPSIZE 修改为 0:

# set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=0

完成以上操作后,最好重启下系统。

安装 Kubeadm

master 节点和 woker 节点都需要安装

kubeadm 可以直接从 Google 自己的软件仓库下载安装,但国内的网络不稳定,很难下载成功,需要改用其他的软件源:

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

使用 apt 安装 kubeadm、kubelet 和 kubectl 这三个安装必备工具。apt 默认会下载最新版本,在这里我们选择的版本是 1.23.3:

sudo apt install -y kubeadm=1.23.3-00 kubelet=1.23.3-00 kubectl=1.23.3-00

安装完成之后,你可以用 kubeadm version、kubectl version 来验证版本是否正确

kubeadm version
kubectl version --client

按照 Kubernetes 官网的要求,我们最好再使用命令 apt-mark hold ,锁定这三个软件的版本,避免意外升级导致版本错误:

sudo apt-mark hold kubeadm kubelet kubectl

安装 Master 节点

sudo kubeadm init \
  --image-repository registry.aliyuncs.com/google_containers \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=192.168.1.10 \
  --kubernetes-version=v1.23.3 \
  --v=5

解释下这里的几个参数:

  • –-image-repository:从阿里云服务器上拉取上面需要的基础镜像,如果不设置,就得去 Google 服务器拉取像
  • -–pod-network-cidr:指定 Pod 网络的范围。Flannel 网络插件需要使用
  • --apiserver-advertise-address:指定 api-server 的 IP 地址,如果有多张网卡,请明确选择哪张网卡。由于 apiserver 在 Kubernetes 集群中有很重要的地位,很多配置(如 ConfigMap 资源等)都直接存储了该地址,后续更改起来十分麻烦,所以要慎重
  • -–kubernetes-version:指定 Kubernetes 版本
  • --v=5:显示详细的跟踪日志

安装过程会持续一会儿,显示以下内容时,安装成功:

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.1.10:6443 --token gse06a.mlxg2efk9ite96an \
	--discovery-token-ca-cert-hash sha256:d41a56ec057ab750b54e1edbbf5d11097ba5364d9015ade6259f2632856b7cd9

安装 Flannel 网络插件

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

安装 Worker 节点

Master 节点安装成功后,会显示以下命令,在 Worker 节点执行即可加入 K8s 集群:

kubeadm join 192.168.1.10:6443 --token gse06a.mlxg2efk9ite96an \
	--discovery-token-ca-cert-hash sha256:d41a56ec057ab750b54e1edbbf5d11097ba5364d9015ade6259f2632856b7cd9

默认 token 的有效期为24小时,当 token 过期之后,需要重新生成 token:kubeadm token create --print-join-command

常见错误

  • 执行 kubeadm init 时报错:[ERROR SystemVerification]: missing required cgroups: memory

    将以下内容添加到 /boot/cmdline.txt 末尾,并重启系统:

    cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
    
文章来自个人专栏
golang
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0