K8S部署
【Linux】Ubuntu部署K8S集群-图文并茂(超详细)-CSDN博客
1、机器准备(Ubuntu)
1.1、机器配置
机器名称 | 内存 | 处理器(核心) | 硬盘 | 网络适配器 |
---|---|---|---|---|
k8s-master | 2GB | 4 | 50G | NAT |
k8s-node1 | 2GB | 4 | 50G | NAT |
k8s-node2 | 2GB | 4 | 50G | NAT |
1.2、系统配置相关调整
1.2.1 配置root用户登录
-
修改配置文件
# 1.修改/etc/ssh/sshd_config文件配置
vim /etc/ssh/sshd_config # 如图修改
-
保存&重启服务
# 2.修改后保存配置
# 3.修改root用户密码
sudo passwd root
...
# 4.重启ssh服务
service ssh restart -
其他
# 若未安装ssh命令,手动安装
#更新软件包
sudo apt update
#安装ssh
sudo apt install openssh-server
#安装ifconfig命令包(刚创建的虚拟机可能会没有)
sudo apt install net-tools
1.2.1 调整计算机名称
# 修改主机名文件
sudo nano /etc/hostname
# 修改hosts文件
sudo nano /etc/hosts
# 重启计算机
#验证
$ hostnamectl
$ hostname
1.2.2 维护用户
# 创建用户(方式1)
sudo adduser k8s-node1
...
# 创建用户(方式2)
sudo useradd k8s-node1
#维护密码
sudo passwd k8s-node1
...
# 删除原用户
su root
userdel -r k8s-node1
1.2.3调整为固定IP
# 网络文件位置
cd /etc/netplan/
格式如下:
# 写入网络配置文件
cat > /etc/netplan/50-cloud-init.yaml <<EOF
network:
version: 2
ethernets:
ens33:
dhcp4: false
addresses: [192.168.162.100/24] # 静态IP地址和子网掩码,修改成自己的IP
optional: true
routes: # 网关地址
- to: default
via: 192.168.162.2 # 修改成自己的网关
nameservers:
addresses: [8.8.8.8] # DNS服务器地址
EOF
生效应用:
# 生效应用
sudo netplan apply
# 查看是否生效
ip addr show
#关闭系统重启导致网卡文件重新生成
vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
# 99-disable-network-config.cfg 设置 network: {config: disabled}
1.2.4开启远程登录
#1.安装ssh服务器
#1.1.检查是否安装
sudo systemctl status ssh
#1.2.安装ssh
sudo apt update
sudo apt install openssh-server
#2.启动ssh服务
#2.1.启动
sudo systemctl start ssh
#2.2.设置开机自启
sudo systemctl enable ssh
#3.配置防火墙
#如果你的系统启用了防火墙(如ufw),你需要允许SSH流量通过。通常SSH使用22端口,可以通过以下命令开放该端口:
sudo ufw allow 22/tcp
sudo ufw enable
#4.检查ssh服务状态
sudo systemctl status ssh
#5.获取IP地址
hostname -I
#6.ssh登录
ssh node1@192.168.162.129
1.3、系统相关调整
1.3.1 IP地址解析
# 添加地址
cat >> /etc/hosts << EOF
192.168.162.100 k8s-master
192.168.162.101 k8s-node1
192.168.162.102 k8s-node2
EOF
# 检验
cat /etc/hosts
1.3.2 设置地址同步
# 更换时区
timedatectl set-timezone Asia/Shanghai
# 安装ntpdate
apt-get install ntpdate
# 使用ntpdate时间同步
ntpdate time1.aliyun.com
# 通过计划实现时间同步
crontab -e
2
0 */1 * * * ntpdate time1.aliyun.comi
1.3.3 配置内核转发
# 配置依赖模块到 /etc/modules-load.d/k8s.conf ,后期可开机自动加载:
cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# 本次加载
modprobe overlay
modprobe br_netfilter
# 查看是否成功
lsmod | egrep "overlay"
lsmod | egrep "br_netfilter"
# 网桥过滤和内核转发追加到 k8s.conf 文件
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
# 内核的路由转发有没有成功打开
sysctl -a | grep ip_forward
1.3.4 ipset和ipvsadm
-
安装ipset和ipvsadm
-
apt-get install ipset ipvsadm
配置 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
1.3.5 关闭swap分区
# 打开 /etc/fstab
vim /etc/fstab
# 注释swap.img行,如图
# 临时关闭SWAP
swapoff -a
# 检查是否关闭
free -m
2.K8S相关
2.1Containerd容器
-
Containerd安装
# 下载
wget https://github.com/containerd/containerd/releases/download/v1.7.5/cri-containerd-1.7.5-linux-amd64.tar.gz
# 安装 Containerd
tar xf cri-containerd-1.7.5-linux-amd64.tar.gz -C /
# 检查是否安装完成
containerd --version
-
创建&修改配置文件
# 创建配置文件所在目录
mkdir /etc/containerd
# 生成默认配置文件:(Containerd的配置文件使用TOML格式)
containerd config default > /etc/containerd/config.toml
# 检查是否成功
ls /etc/containerd
# 配置文件修改
vim /etc/containerd/config.toml
# 首先是65行的 sanbox_image = "registry.k8s.io/pause:3.8" 改成 sanbox_image = "registry.k8s.io/pause:3.9"
# 然后是137行的 SystemdCgroup = false 改成 SystemdCgroup = true
-
启动containerd&开机自启
# 设置开机自启&现在启动
systemctl enable --now containerd
# 检查是否启动
systemctl status containerd
2.2Kubernetes
-
下载更新
# 将阿里云的软件源写入kubernetes.list
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 验证是否写入成功
ls /etc/apt/sources.list.d
# 更新软件源
apt-get update
# bug 执行完以后会提示如下图所示的错误,这个主要是因为没有公钥,缺少 GPG 的key导致的:
# 公钥:B53DC80D13EDEF05
# 将公钥添加至服务器
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B53DC80D13EDEF05
# 再次更新软件源
apt-get update -
软件安装
#查看支持的版本
apt-cache madison kubeadm
apt-cache madison kubelet
apt-cache madison kubectl
# 我们要使用 kubeadm 对我们的集群进行初始化,所以要先安装必要的软件:
apt-get install kubeadm=1.28.1-00 kubelet=1.28.1-00 kubectl=1.28.1-00
# 验证是否成功
kubeadm version
kubelet --version
kubectl version
# 锁定版本
apt-mark hold kubeadm kubelet kubectl -
集群初始化(master主机)
# 创建kubeadm配置文件(配置打印到 kubeadm-config.yaml 文件)
kubeadm config print init-defaults > kubeadm-config.yaml
# 查看是否成功
ll
# 修改kubeadm-config.yaml
vim kubeadm-config.yaml
#IP 192.168.162.100
#name master
#imageRepository registry.aliyuncs.com/google_containers
#kubernetesVersion 1.28.1
#在 networking 中的 serviceSubnet 后面加上 podSubnet: 10.244.0.0/16
#配置文件最后
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd
#同步修改
vim /etc/containerd/config.toml
# 重启containerd和kubelet
systemctl restart containerd
systemctl restart kubelet
# 镜像下载(指定阿里源)
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version v1.28.1
# 导入环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf
#加入配置项
#打开.bashrc
nano ~/.bashrc
#结尾添加 export KUBECONFIG=/etc/kubernetes/admin.conf
#生效
# 初始化
kubeadm init --config kubeadm-config.yaml
# 滚动查看日志信息
journalctl -u kubelet -f -
准备kubectl配置文件(master主机)
# 创建
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 nodes -
Node节点添加到集群(Node主机)
# 在master节点初始化时生成的信息复制(不要用我的)
kubeadm join 192.168.162.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:c5589858b33e28ef885a4dcb23cc8845db32b2d7bcbec9847b3706c2cca68045
# 在node节点服务器上运行
# master节点生成的内容
# 配置防火墙
sudo ufw allow 6443/tcp
sudo ufw enable
# 检查节点是否成功
kubectl get nodes
3.K8S集群网络插件Calico
3.1安装并应用Tigera-operator(master主机)
# operator(master服务器)
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
# 检查tigera-operator是否存在
kubectl get ns
# 检查node是否是Runing
kubectl get pods -n tigera-operator
3.2自定义配置
-
下载并编辑custom-resources.yaml(master主机)
# 下载自定义组件
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml
# 修改集群初始化指定网段 10.244.0.0/16
vim custom-resources.yaml
-
拉取镜像(所有机器)
ctr image pull docker.1ms.run/calico/cni:v3.26.1
ctr image pull docker.1ms.run/calico/pod2daemon-flexvol:v3.26.1
ctr image pull docker.1ms.run/calico/node:v3.26.1
ctr image pull docker.1ms.run/calico/kube-controllers:v3.26.1
ctr image pull docker.1ms.run/calico/typha:v3.26.1
ctr image pull docker.1ms.run/calico/node-driver-registrar:v3.26.1
ctr image pull docker.1ms.run/calico/csi:v3.26.1
-
查看/删除镜像(所有机器)
# 查看
ctr image list
# 删除所有镜像
ctr images list -q | xargs -r ctr images rm
-
应用/取消应用custom-resources.yaml
# 应用custom-resources.yaml
kubectl create -f custom-resources.yaml
# 删除custom-resources.yaml
kubectl delete -f custom-resources.yaml
-
查看所有命名空间
kubectl get ns
# 大约2-3分钟
# 查看pod的状态
kubectl get pods -n calico-system
#相关节点错误时,删除指定pod
kubectl delete pod calico-node-2gf5s -n calico-system
-
错误
提示镜像无法拉取
# 所有机器
# 打开文件
/etc/containerd/config.toml
# 查找指定字符串
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
#下方添加(如图)
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://docker.1ms.run"]
# 验证文件格式
sudo containerd config dump > /tmp/containerd-config-dump.toml
# 重启containerd
sudo systemctl restart containerd
4.可视化插件
4.1安装kuboard-v3
-
安装并应用
# 下载镜像
wget https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
# 执行创建
kubectl apply -f kuboard-v3-swr.yaml
# 下载失败,删除应用
kubectl delete -f kuboard-v3-swr.yaml -
若无法下载镜像
# 修改镜像源(地址)
vim kuboard-v3-swr.yaml
# 地址(如图调整):
registry.cn-hangzhou.aliyuncs.com/zhengfp_images/kuboard-agent
registry.cn-hangzhou.aliyuncs.com/zhengfp_images/etcd-host:3.4.16-1
registry.cn-hangzhou.aliyuncs.com/zhengfp_images/kuboard:v3
registry.cn-hangzhou.aliyuncs.com/zhengfp_images/questdb:6.0.4
#重新执行创建 -
测试
# 链接地址
http://192.168.162.100:30080
# 输入用户密码
用户名: admin
密码: Kuboard123 -
错误
#查看pod节点
kubectl get pods -n kuboard
#查看错误日志
kubectl logs kuboard-v3-7979bc788f-hln74 -n kuboard
# 错误含
1.desc = "transport: Error while dialing dial tcp: missing address"
2.CrashLoopBackOff
# 错误修复
kubectl label nodes mater01 k8s.kuboard.cn/role=etcd
4.2 web配置
4.2.1 错误集群删除
4.2.2 输入集群名称和描述
4.2.3 复制kubeConfig
# 查询config信息
cat ~/.kube/config
# 复制全部内容并写入上图
4.2.4 如图代表成功
4.3部署Nginx服务
4.3.1 在首页点击集群,选择命名空间
4.3.2 填写信息
左边选择,名称空间>常用操作>创建工作负载,然后再填写基本信息
4.3.3填写容器信息
阿里云镜像地址
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
填写好之后点击上面的保存>应用>确认>
4.3.4 查看
4.3.5访问测试
# 访问
http://192.168.162.100:30300
http://192.168.162.101:30300
http://192.168.162.102:30300
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了