其他 Linux Linux 基于Ubuntu 20.04.06操作系统极速部署K8S集群(更新增加kuboard配置) kikock 2024-10-16 2024-10-16 1.Uduntu 服务器准备
主机名称
IP地址
系统
k8s-master-11
192.168.88.11
Uduntu
k8s-node-12
192.168.88.12
Uduntu
k8s-node-13
192.168.88.13
Uduntu
1.1 root用户密码处理
1 2 3 4 sudo -i //切换root用户 echo root:Aa551122 |sudo chpasswd root //修改root的密码 echo root:要登录的密码 |sudo chpasswd root
1.2 网络配置
配置文件地址 /etc/netplan/00-installer-config.yaml
1 2 3 4 5 6 7 # 备份文件网络配置文件 mv /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak # 添加新的网络配置 vi /etc/netplan/00-network-manager.yaml # 应用配置 netplan apply
静态地址配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no addresses: - 192.168 .88 .10 /24 routes: - to: default via: 192.168 .88 .2 nameservers: addresses: - 223.6 .6 .6 - 114.114 .114 .114 - 8.8 .8 .8
1.3 关闭防火墙和selinux
1 2 3 4 5 6 7 8 9 10 11 12 13 # 查看防火墙状态 sudo ufw status # 关闭防火墙 sudo ufw disable # 永久关闭防火墙 sudo systemctl disable ufw # 关闭 selinux sudo setenforce 0 # 永久关闭 selinux 打开配置文件 ,将 SELINUX=enforcing 修改为 SELINUX=disabled sudo vi /etc/selinux/config
1.4 关闭swap分区
1 2 3 4 5 6 7 8 9 10 11 12 # 临时禁用: sudo swapoff /swapfile # 永久禁用: 编辑文件删除 /swapfile 这一行 vim /etc/fstab # 使用 free -m 命令来查看确认交换分区已经被禁用 free -m
1.5 主机名称配置
1 2 3 4 5 6 7 hostnamectl set-hostname k8s-master-11 #11服务器执行此行命令 hostnamectl set-hostname k8s-node-12 #12服务器执行此行命令 hostnamectl set-hostname k8s-node-13 #13服务器执行此行命令
1.6 host文件,解析主机名称
1 2 3 4 5 6 7 8 echo ''' 192.168.88.11 k8s-master-11 192.168.88.12 k8s-node-12 192.168.88.13 k8s-node-13 ''' >> /etc/hosts
1.7 系统时区配置为+8(三台设备同时处理)
1 2 3 4 5 6 7 8 9 10 11 # 查看当前时区 timedatectl status # 设置时区为上海 sudo timedatectl set-timezone Asia/Shanghai # 查看时区是否设置成功 timedatectl status
1.8 配置内核转发以及网桥过滤(三台设备同时处理)
配置文件地址 /etc/modules-load.d/k8s.conf 增加以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 文件写入 cat > /etc/modules-load.d/k8s.conf << EOF overlay br_netfilter EOF # 加载配置 modprobe overlay modprobe br_netfilter # 查看是否加载 lsmod |grep overlay lsmod |grep br_netfilter
内核转发和网桥过滤配置文件 /etc/sysctl.d/k8s.conf
1 2 3 4 5 6 7 8 9 10 11 12 cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF # 让配置生效: sysctl -p /etc/sysctl.d/k8s.conf # 查看是否加载生效 lsmod |grep br_netfilter
1.9 安装ipset和ipvsadm (三台设备同时处理)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 apt install ipset ipvsadm # 配置 ipvsadm 模块加载方式 cat > /etc/modules-load.d/ipvs.conf << EOF # !/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF # 写成一个手动启动脚本文件 cat << EOF | tee ipvs.sh modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF
2.容器运行时准备 containerd 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # containerd下载 wget https://github.com/containerd/containerd/releases/download/v1.7.23/cri-containerd-1.7.23-linux-amd64.tar.gz # 解压并查看 tar xf cri-containerd-1.7.23-linux-amd64.tar.gz -C / which containerd # containerd配置文件生成并修改 # 创建文件 mkdir /etc/containerd # 生成配置文件: containerd config default > /etc/containerd/config.toml # 修改配置文件 # 修改配置文件将pause:3.8改为3.9 # 或者改为阿里云:registry.aliyuncs.com/google_containers/pause:3.9 # 将SystemdCgroup = false 改为true # 启动并设置开机自启 systemctl enable --now containerd # 查看版本: containerd --version
3.k8s 安装部署 3.1 下载用于kubernetes软件包仓库的公告签名密钥
1 2 3 4 5 6 7 8 # 创建目录 sudo mkdir -p /etc/apt/keyrings/ # 下载密钥 curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg # 添加kubernetes apt仓库 echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
1 2 3 4 5 6 7 8 9 # 创建目录: sudo mkdir -p /etc/apt/keyrings/ # 下载密钥 curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg # 添加kubernetes apt仓库 echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
3.2 安装kubelet、kubeadm、kubectl
1 2 3 4 5 6 7 8 # 查看软件列表: apt-cache madison kubeadm # 安装指定版本: sudo apt-get install -y kubelet=1.30.5-1.1 kubeadm=1.30.5-1.1 kubectl=1.30.5-1.1 # 锁定版本,防止后期自动更新。 sudo apt-mark hold kubelet kubeadm kubectl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # !/bin/bash # 更新软件包列表 apt update # 安装 apt-transport-https 和 curl apt install -y apt-transport-https curl # 添加 Kubernetes 的 GPG 密钥 curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg # 添加kubernetes apt仓库 echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list # 更新软件包列表 apt-get update # 检查 kubelet、kubectl 和 kubeadm 的可用版本 apt-cache madison kubelet kubectl kubeadm | grep '1.30.5-1.1' # 安装指定版本的 Kubernetes 组件 apt install -y kubelet=1.30.5-1.1 kubectl=1.30.5-1.1 kubeadm=1.30.5-1.1
3.3 集群初始化
kubeadm config images list –config kubeadm-config.yaml
1 2 3 4 5 6 7 8 9 # 生成配置文件: kubeadm config print init-defaults > kubeadm-config.yaml # 修改配置文件: vim kubeadm-config.yaml
配置文件修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication localAPIEndpoint: advertiseAddress: 192.168 .88 .11 bindPort: 6443 nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock imagePullPolicy: IfNotPresent name: k8s-master01 taints: null --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration apiServer: timeoutForControlPlane: 4m0s certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {}dns: {}etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers kubernetesVersion: 1.30 .0 networking: dnsDomain: cluster.local serviceSubnet: 10.96 .0 .0 /12 podSubnet: 10.244 .0 .0 /16 scheduler: {}--- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd
查看并下载镜像,初始化集群
1 2 3 4 5 6 7 8 # 查看镜像 kubeadm config images list --config kubeadm-config.yaml # 下载镜像 kubeadm config images pull --config kubeadm-config.yaml # 初始化集群 kubeadm init --config kubeadm-config.yaml
3.4 安装完成后配置
初始完成后按照反馈的命令执行
1 2 3 # 在k8s-master01节点查看是否有工作节点加入 kubectl get nodes
加入其他节点
1 2 3 4 5 # 初始化完成后 如图 kubeadm join 命令输出 # 查看加入节点命令,在加入主机执行 kubeadm token create --print-join-command
4.网络插件安装部署(k8s-master01节点操作) 4.1 访问calico的官网
Quickstart for Calico on Kubernetes | Calico Documentation (tigera.io)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 创建配置文件 1 kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/tigera-operator.yaml # 查看是否运行: kubectl get pods -n tigera-operator wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/custom-resources.yaml # 注我们在kubeadm-config.yaml文件中添加的pod网段是10.244.0.0/16所以我们要修改为一样的 vim custom-resources.yaml # 应用配置 kubectl create -f custom-resources.yaml # 查看命名空间 kubectl get ns # 查看命名空间中运行的pods 如果没有全部起来稍微等一下,应该是在创建中,如果网络慢可能要半个小时。 kubectl get pods -n calico-system # 查看集群状态: kubectl get nodes
5.创建nginx测试集群可用性(k8s-master操作) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 vim nginx.yaml --- apiVersion: apps/v1 kind: Deployment metadata: name: nginxweb spec: selector: matchLabels: app: nginxweb1 replicas: 2 template: metadata: labels: app: nginxweb1 spec: containers: - name: nginxwebc image: nginx:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginxweb-service spec: externalTrafficPolicy: Cluster selector: app: nginxweb1 ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30080 type: NodePort
1 2 3 4 5 6 7 # 启动创建容器 kubectl apply -f nginx.yaml # 查看是否创建成功 kubectl get deployment kubectl get pods kubectl get svc
在浏览器访问集群中任何一台服务器的IP加30080端口都可以访问到我们的nginx
其他问题 node1节点执行kubectl get pods命令时,报了如下错误:
解决方案
复制master节点中 /etc/kubernetes/admin.conf 拷贝到需要运行的服务器/etc/kubernetes目录
对应服务器配置环境变量并应用
1 2 3 4 5 echo "export KUBECONFIG=/etc/kubernetes/admin.config" >> ~/.bash_profile source ~/.bash_profile