提示:自己搭K8S有多痛苦懂的都懂,所以文中提到的各种版本号,尽量保证一致。

1.配置主机名

master 控制节点

hostnamectl set-hostname k8s-master

 工作节点

hostnamectl set-hostname k8s-node01

2.IP配置 (针对本地自己搭建的虚拟机,云服务不要改动,跳过

master控制节点和node工作节点都要配。

ifconfig看下内网ip。还要注意自己的网卡名啊,比如我下面这个就是ens33

然后配置netplan,配置文件目录就是/etc/netplan/,具体文件名有可能不太一样,敲 00 tab一下。

vi /etc/netplan/00-installer-config.yaml

找网卡ens33。别配错地方了。addresses填本机的内网ip。路由网段也配成自己的。via:192.168.x.x

保存退出,让配置生效。

netplan apply

同上,每个节点都这样配置一遍。

3.主机名IP地址解析

vi /etc/hosts

填写之前配好的主机名,和对应的内网地址。每个节点都要这么把集群内所有节点的主机名IP配上。

保存退出

4.配置K8S内核转发 网桥

每个节点主机都要搞。

创建内核文件

cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

加载

modprobe overlay
modprobe br_netfilter

验证

lsmod | egrep overlay
lsmod | egrep overlay
lsmod | egrep br_netfilter

网桥过滤 内核转发配置

cat << EOF | 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

加载

sysctl --system

5.安装ipset ipvsadm

所有节点主机都要装

apt install ipset ipvsadm

配置ipvsadm 添加模块

cat << EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF

创建加载模块脚本

cat << EOF | tee ipvs.sh
#!/bin/sh
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

执行脚本

sh ipvs.sh

验证

lsmod | grep ip_vs

6.关闭SWAP分区

所有节点主机都要关闭

先看是否开启了swap分区

free -m

如果开启则关闭

swapoff -a

设置永久关闭

vi /etc/fstab

注释掉最下面这行

保存退出

7.容器运行时Containerd安装部署

所有节点主机都要装

下载 1.7.11版本https://github.com/containerd/containerd/releases/download/v1.7.11/cri-containerd-1.7.11-linux-amd64.tar.gz

解压到根目录

tar xf cri-containerd-1.7.11-linux-amd64.tar.gz -C /

生成配置文件

mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml

修改

vi /etc/containerd/config.toml

65行 sandbox_image,国外服务器只需要把 "pause:3.8" 改成 "pause:3.9",国内改成 "registry.aliyuncs.com/google_containers/pause:3.9"。

137行 SystemdCgroup,false改成true。

启动

systemctl enable --now containerd

验证

containerd --version

8.K8S部署

以下所有节点都要做

如果是国外的主机 走官方库 按照下面这么install

下载k8s软件包仓库公共签名密钥

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmour -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

添加仓库

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

更新

apt-get update

开始安装

apt-get install -y kubelet=1.29.0-1.1 kubeadm=1.29.0-1.1 kubectl=1.29.0-1.1

关闭自动更新

apt-mark hold kubelet kubeadm kubectl

如果是国内的主机 无梯 这么install

apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl

关闭自动更新

apt-mark hold kubelet kubeadm kubectl

然后操作主节点master节点 下面这一堆都是操作master节点!!

先生成kubeadm配置文件

kubeadm config print init-defaults > kubeadm-config.yaml

修改配置文件

nodeRegistration:name 这个是注册k8s节点时候的名字可改可不改

advertiseAddress 换成自己的内网ip

imageRepository 根据情况换 registry.aliyuncs.com/google_containers

networking加上 podSubnet:10.244.0.0/16 (看图中红框部分)

最后换kubelet内核驱动 末尾加上 (图中红框)

---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd

kubeadm初始化

kubeadm init --config kubeadm-config.yaml

成功如下图 Your Kubernetes control-plane has initialized successfully!

注意蓝框中的部分,需要根据篮筐中的提示生成kubectl配置文件

执行

mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

图中最下面

kubeadm join 192.168.0.241:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:abbd129b388861f1b33d5c11e70bc1fc12ba73b9d48eb7ab759ae90fd16cbd20

这段就是集群添加worker node的命令,这是临时的。

到非master节点去执行,加入到集群中。

到master节点执行

kubectl get nodes

如下图,代表加入成功。

9.Calico部署

操作在主节点上 master

如果服务器有梯或者在国外 直接拉

官网Quickstart for Calico on Kubernetes | Calico Documentation (tigera.io)icon-default.png?t=N7T8https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart#install-calico

Install Calico

注意官网的这个命令是最新的,我们这个用的是3.26.4版本。建议版本不要超过3.27

执行

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/tigera-operator.yaml

如果是国内服务器无梯 那就先把yaml文件down下来 就是url输入到浏览器 右键另存为

down下来再扔服务器上 (你down文件这步不确定是不是须要魔法 0.0,我知道你很烦,没招啊)

然后执行

kubectl create -f tigera-operator.yaml

下一步执行第二个

这步先下载文件

wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/custom-resources.yaml

然后修改

改成 10.244.0.0/16

改完保存执行

kubectl create -f custom-resources.yaml

然后查看网络创建过程

watch kubectl get pods -n calico-system -o wide

所有pod都是running状态,ready状态,就是组网成功了。

这里强调一下,如果calico-node都不是1/1 ready状态,都是0/1,那么肯定是你原生网络环境有问题。我在这步就掉坑里了,calico BGP模式组网,node间通讯要走TCP,179端口,还有各种烂七八糟的端口,都要能通的。云服务搭建的同学一定要注意这点,先把安全组配好。

TCP:179 5473 6666 6443 2379 2380

UDP:4789 

但还是建议按范围开端口,这些端口是有可能变化的。

如果大多数是1/1,一部分或者某个calico-node是0/1,那么大概率就是网卡错误。先看pod日志,如果看到“Readiness probe failed: calico/node is not ready: BIRD is not ready”,那基本就是网卡不对,节点的ip获取不到。那么就看下你正在使用的网卡是啥,本文是tigera-operator搭建calico,那就修改tigera-operator.yaml。指定网卡,或者正则匹配网卡。我当前使用的网卡是eht0,那就指定为eth0。如下图。

修改custom-resources.yaml文件,spec.calicoNetwork下加上。

nodeAddressAutodetectionV4:
    interface: eth0

然后重拉一遍

kubectl apply -f custom-resources.yaml

10.Kuboard可视化工具部署

可视化web ui有不少,kuboard是我用着最顺手的。

安装 Kuboard v3 - kubernetes | Kuboardicon-default.png?t=N7T8https://kuboard.cn/install/v3/install-in-k8s.html#%E5%AE%89%E8%A3%85把这个文件wget down下来

wget https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml

修改几个地方

注释掉KUBOARD_SERVER_NODE_PORT: '30080'

加上KUBOARD_ENDPOINT: 'http://192.168.0.241:30080'

192.168.0.241 换成你集群随便一个节点的内网IP

#KUBOARD_SERVER_NODE_PORT: '30080'
  KUBOARD_ENDPOINT: 'http://192.168.0.241:30080'

 

128行 镜像拉取策略改成 IfNotPresent

221行也是

都改好了,保存退出,执行。

kubectl apply -f kuboard-v3-swr.yaml

然后执行

watch kubectl get pods -n kuboard

这样就是成功了

浏览器访问 http://IP:30080

如果你是云服务搭建的同学,那IP就是你集群随便一个节点的公网IP地址哈。

公网Kuboard还要注意,如果你的master节点服务器80端口不通(有的云服务厂商需要备案才能开80),那么http://MASTER-NODE-IP:30080很有可能打不开, 可以尝试别的节点的IP看看好不好使,一般来说,work节点IP就能打开了,Kuboard Agent会自己内部跳转。

打开如下图

初始账户密码 admin Kuboard123

公网同学赶紧改密码啊!!!登录进去在用户这里能改。

然后就是导入集群信息

点添加集群

选择KubeConfig

然后把你之前生成的 .kube文件夹下的config里的内容直接粘里,集群名称和描述,自己填好,最后确定。

最后,祝大家搭建顺利,k8s使用快乐,不出问题。(〃'▽'〃)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐