• K8s学习笔记1-搭建k8s集群


    本次使用kubeadm方式,部署1.23.17版本

    安装包百度云盘地址:

    链接:https://pan.baidu.com/s/1UrIotP253DoyDIYB7G1C0Q 
    提取码:8q6a

    集群所需虚拟机环境

    主机名称IP资源
    harbor10.0.0.2301c2g
    master10.0.0.2312c4g
    worker110.0.0.2322c4g
    worker210.0.0.2332c4g

    节点环境准备

    1.所有节点hosts解析

    1. cat >> /etc/hosts <
    2. 10.0.0.230 harbor harbor.test.com
    3. 10.0.0.231 master
    4. 10.0.0.232 worker1
    5. 10.0.0.233 worker2
    6. EOF

    2.harbor节点部署harbor镜像仓库(之前的博客有)

    3.每个节点安装docker

    yum -y install lrasz
    

    然后将安装包拖进去获取rz -E 上传就好了

    · 上传后解压安装

    1. tar xf docker.tar.gz
    2. ./install-docker.sh install

    · 配置内核转发

    1. [root@master ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
    2. [root@master ~]# sysctl -p
    3. net.ipv4.ip_forward = 1

    · k8s三个节点每个节点配置docker

    1. vim /etc/docker/daemon.json
    2. {
    3. "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],
    4. "insecure-registries": ["harbor.test.com"],
    5. "exec-opts": ["native.cgroupdriver=systemd"]
    6. }

    · 解析

    1. "insecure-registries": ["harbor.test.com"], #允许拉取自建仓库harbor仓库的镜像;
    2. "exec-opts": ["native.cgroupdriver=systemd"] #kubeadm去寻找的cgroup默认是systemd,而docker不配置的话,默认是cgroupfs,不配置这个,部署k8s时会报错;

    · 配置完成后重启docker服务

    systemctl restart docker

    4.三个节点关闭swap分区

    · 查看swap

    1. [root@master ~]# free -h
    2. total used free shared buff/cache available
    3. Mem: 3.8G 275M 2.7G 19M 896M 3.3G
    4. Swap: 2.0G 0B 2.0G

    · 关闭swap

    [root@master ~]# sed -ni '/^[^#]*swap/s@^@#@p' /etc/fstab

    5.三个节点配置允许iptables桥接流量

    1. cat > /etc/modules-load.d/k8s.conf << EOF
    2. br_netfilter
    3. EOF
    4. cat > /etc/sysctl.d/k8s.conf << EOF
    5. net.bridge.bridge-nf-call-ip6tables=1
    6. net.bridge.bridge-nf-call-iptables=1
    7. net.ipv4.ip_forward=1
    8. EOF
    9. sysctl --system

    6.关闭防火墙和selinux

    · 关闭防火墙和selinux

    1. systemctl stop firewalld
    2. systemctl disable firewalld

    · 关闭selinux

    1. vi /etc/selinux/config
    2. 改成:SELINUX=disabled

    kubeadm方式部署k8s

    1.上传解压软件包

    tar xf kubeadm-kubelet-kubectl.tar.gz
    

    2.本地化安装

    yum -y localinstall kubeadm-kubelet-kubectl/*.rpm

    3.设置启动及开机自启动k8s

    systemctl enable --now kubelet.service

    4.查看状态(此时启动失败,不用管,因为还没配置完成,配置完之后自动回启动)

    systemctl status kubelet.service

    5.初始化master节点

     kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16  --service-dns-domain=test.com
    

            参数解析

    1. --pod-network-cidr=10.100.0.0/16 #pod的网段
    2. --service-cidr=10.200.0.0/16 #service资源的网段
    3. --service-dns-domain=test.com #service集群的dns解析名称

    ·如果初始化失败,想要重新初始化 

    1. 先执行:kubeadm reset -f
    2. 在执行: kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16 --service-dns-domain=test.com

    ·若k8s 初始化失败

    ·然后查看docker服务,发现docker启动失败

    发现硬盘变为只读硬盘

    ·将只读文件系统变更为可写的

    1.查找只读硬盘

    2.将硬盘重新挂载
    1. mount -o remount,rw /sys/fs/cgroup
    2. mount -o remount,rw /

    重新初始化即可

    6.初始化成功后按照提示执行

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

    7.验证下master节点组件

    ·查看master组件

    1. [root@master pod]# kubectl get cs
    2. Warning: v1 ComponentStatus is deprecated in v1.19+
    3. NAME STATUS MESSAGE ERROR
    4. controller-manager Healthy ok
    5. scheduler Healthy ok
    6. etcd-0 Healthy {"health":"true","reason":""}

    ·查看集群节点,此时只有一个master节点

    1. [root@master pod]# kubectl get nodes
    2. NAME STATUS ROLES AGE VERSION
    3. master Ready control-plane,master 31h v1.23.17

    8.将worker节点加入到集群中

    ·在两个worker节点上分别执行执行

    kubeadm join 10.0.0.231:6443 --token 0he81g.kbo3vnqqmep9m33p --discovery-token-ca-cert-hash sha256:f865442d8659854db32f692d937c2d8b17e2a07942e8bd7d7bbb8a1d831b3fd1

    ·若是初始化后很长时间没有将worker节点加入到集群中,token会失效,需要重新生成

    token失效报错如下:

    master节点重新生成

    kubeadm token create --print-join-command

    然后在worker节点上分别执行生成的命令即可

    9.查看集群状态

    ·master节点查看

    worker节点加入集群后,在master节点上查看,此时发现,状态显示“NotReady,是因为未有CNI网络组件

    1. [root@master ~]# kubectl get nodes
    2. NAME STATUS ROLES AGE VERSION
    3. k8s231 NotReady control-plane,master 13m v1.23.17
    4. k8s232 NotReady <none> 40s v1.23.17
    5. k8s233 NotReady <none> 18s v1.23.17

    10.master节点部署网络组件

    ·上传flannel组件(kube-flannel.yml)

    ·修改配置文件信息(修改网段信息--net-conf.json)

    1. net-conf.json: |
    2. {
    3. "Network": "10.100.0.0/16",
    4. "Backend": {
    5. "Type": "vxlan"
    6. }
    7. }

    ·部署flannel组件

    kubectl apply -f kube-flannel.yml

    ·查看flannel组件是否成功创建pod(每个节点是否都有)

    [root@master pod]# kubectl get pods -A -o wide | grep flannel
    

    问题:镜像拉不下来,imagebackoff

    这里,如果未更改配置文件中的镜像下载地址,【running】那里会显示【imagebackoff】,这是因为国内把docker给禁了,无法直接从docker官网拉镜像了,可以先把镜像上传到harbor,将镜像下载地址变更为harbor的就好了(进入文件,输入/,然后输入image,将镜像地址变更为harbor地址)

    1.修改flannel配置文件

    这里是我自己的配置的地址,这个要根据自己配置的来

    1. image: harbor.test.com/k8s/flannel/flannel:v0.22.2
    2. image: harbor.test.com/k8s/flannel/flannel-cni-plugin:v1.2.0
    3. image: harbor.test.com/k8s/flannel/flannel:v0.22.2

    配置完成后

    2.先删除部署flannel组件
    kubectl delete -f kube-flannel.yml
    3.重新部署
    kubectl apply -f kube-flannel.yml
    4.再次查看节点状态
    1. [root@master pod]# kubectl get nodes
    2. NAME STATUS ROLES AGE VERSION
    3. master Ready control-plane,master 31h v1.23.17
    4. worker1 Ready <none> 30h v1.23.17
    5. worker2 Ready <none> 30h v1.23.17

    至此,k8s集群搭建完毕

  • 相关阅读:
    全职独立开发经验分享
    基于Java的电影院管理系统设计与实现
    not in vs left join is null
    黑眼圈:缓解/防止方法
    美国针对纺织服装的法规
    Vue理解01
    【从零开始学zabbix】一丶Zabbix的介绍与部署Zabbix
    人脸修复祛马赛克算法CodeFormer——C++与Python模型部署
    什么是TB程序化接口?
    bat脚本-不关闭窗口
  • 原文地址:https://blog.csdn.net/weixin_46466657/article/details/140235565