当前位置: 代码网 > 服务器>服务器>Linux > Ubuntu 22.04搭建 K8S 1.29+Calicao网络+Kuboard 超详细

Ubuntu 22.04搭建 K8S 1.29+Calicao网络+Kuboard 超详细

2024年07月28日 Linux 我要评论
最后,祝大家搭建顺利,k8s使用快乐,不出问题。(〃'▽'〃)提示:自己搭K8S有多痛苦懂的都懂,所以文中提到的各种版本号,尽量保证一致。

提示:自己搭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使用快乐,不出问题。(〃'▽'〃)

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com