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

posted @   shunlu01  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示