码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【云原生K8S】kubeadm部署kubernetes集群


    目录

    一、节点基础环境

    Ⅰ、关闭防火墙

    Ⅱ、关闭SElinux

    Ⅲ、关闭swap

    Ⅳ、 iptables

    Ⅴ、域名-ip对应

    二、安装所需部件

    Ⅰ、docker-ce

    Ⅱ、kubelet、kubectl、kubeadm下载安装

    Ⅲ、拉取必要镜像

    Ⅳ、Master节点安装网络组件

    三、构建集群

    Ⅰ、在master节点上进行初始化

    (1)初始化报错

    (2)解决

    Ⅱ、node加入集群

    (1)加入集群报错

    (2)解决

     Ⅲ、查看集群信息

    (1)查询K8S集群节点状态  

    (2)查看K8S集群中Pod信息

    (3)查看K8S集群组件健康状态 

    kubelet无法开启报错

    kubelet和docker的Cgroup Driver不同导致kubelet开启失败

    查看docker的Cgroup Driver

    查看kubelet 的Cgroup Driver

    修改docker的Cgroup Driver

    修改kubelet 的Cgroup Driver


    集群环境

    IP节点所需部件
    192.168.116.23masterdocker-ce、kubeadm、kubelet、kubectl
    192.168.116.24node1docker-ce、kubeadm、kubelet、kubectl
    192.168.116.25node2docker-ce、kubeadm、kubelet、kubectl

    一、节点基础环境

    Ⅰ、关闭防火墙

    systemctl disable --now firewalld.service

    Ⅱ、关闭SElinux

    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

    Ⅲ、关闭swap

    1. free -m
    2. #查看swap情况
    sed -ri 's/.*swap.*/#&/' /etc/fstab

    重启后生效

    Ⅳ、 iptables

    1. cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    2. br_netfilter
    3. EOF
    1. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    2. net.bridge.bridge-nf-call-ip6tables = 1
    3. net.bridge.bridge-nf-call-iptables = 1
    4. EOF
    sysctl --system

    Ⅴ、域名-ip对应

     添加要作为master节点的服务器IP的域名对应关系

    echo "192.168.116.23   cluster-endpoint">> /etc/hosts

    二、安装所需部件

    Ⅰ、docker-ce

    具体请参考Docker概念与基础操作

    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && yum install -y docker-ce
    systemctl enable --now docker.service

    docker --version

    Ⅱ、kubelet、kubectl、kubeadm下载安装

    添加yum源

    1. cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    2. [kubernetes]
    3. name=Kubernetes
    4. baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    5. enabled=1
    6. gpgcheck=0
    7. repo_gpgcheck=0
    8. gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
    9. http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    10. exclude=kubelet kubeadm kubectl
    11. EOF

     进行下载,注意版本一致问题

    sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 
    sudo systemctl enable --now kubelet

    Ⅲ、拉取必要镜像

    1. kube-apiserver:v1.20.9

    2. kube-proxy:v1.20.9

    3. kube-controller-manager:v1.20.9

    4. kube-scheduler:v1.20.9

    5. coredns:1.7.0

    6. etcd:3.4.13-0

    7. pause:3.2

    使用脚本完成镜像拉取

    1. sudo tee ./images.sh <<-'EOF'
    2. #!/bin/bash
    3. images=(
    4. kube-apiserver:v1.20.9
    5. kube-proxy:v1.20.9
    6. kube-controller-manager:v1.20.9
    7. kube-scheduler:v1.20.9
    8. coredns:1.7.0
    9. etcd:3.4.13-0
    10. pause:3.2
    11. )
    12. for imageName in ${images[@]} ; do
    13. docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
    14. done
    15. EOF

    执行脚本 

    chmod +x ./images.sh && ./images.sh

    Ⅳ、Master节点安装网络组件

    curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
    kubectl apply -f calico.yaml

    三、构建集群

    Ⅰ、在master节点上进行初始化

    1. kubeadm init \
    2. --apiserver-advertise-address=192.168.116.23 \
    3. --control-plane-endpoint=cluster-endpoint \
    4. --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
    5. --kubernetes-version v1.20.9 \
    6. --service-cidr=10.96.0.0/16 \
    7. --pod-network-cidr=192.168.0.0/16

     初始化后成功注意以下信息,上面的命令在master执行,下面的在要加入集群的node服务器上执行。

    (1)初始化报错

    1. [kubelet-check] Initial timeout of 40s passed.
    2. error execution phase upload-config/kubelet:
    3. Error writing Crisocket information for the control-plane node: timed out waiting for the condition

    (2)解决

    swapoff -a && kubeadm reset && systemctl daemon-reload && systemctl restart kubelet && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

    然后重新进行初始化

    Ⅱ、node加入集群

    在node节点服务器输入master服务器上初始化成功后加入集群的命令

    (1)加入集群报错

    1. failure loading certificate for CA: couldn't load the certificate file
    2. /etc/kubernetes/pki/ca.crt: open /etc/kubernetes/pki/ca.crt:
    3. no such file or directory

    疑似缺失证书文件 

    (2)解决

    实际上发现,是在复制执行命令时带上了--control-plane,去掉后表示为以node服务器加入集群(摊手)  

     Ⅲ、查看集群信息

    在master节点使用kubectl命令行工具进行查看目前集群情况

    kubectl命令格式:

    kubectl [command] [TYPE] [NAME] [flags]

    (1)查询K8S集群节点状态  

    kubectl get nodes

    (2)查看K8S集群中Pod信息

    kubectl get pod -A

    (3)查看K8S集群组件健康状态 

    kubectl get cs

     这里很明显两个大大的“Unhealthy”不健康写在面前,需要我们去修改一下端口号来解决

    vim /etc/kubernetes/manifests/kube-controller-manager.yaml

    vim /etc/kubernetes/manifest/kube-scheduler.yaml

     稍微等待一会,再次查看,这回都是healthy了

    kubelet无法开启报错

    kubelet和docker的Cgroup Driver不同导致kubelet开启失败

    查看Cgroup Driver

    查看docker的Cgroup Driver

    docker info | grep Driver

    查看kubelet 的Cgroup Driver

    systemctl show --property=Environment kubelet | cat

    修改docker的Cgroup Driver

    1. /etc/docker/daemon.json
    2. {
    3. "exec-opts": ["native.cgroupdriver=systemd"]
    4. }

    修改kubelet 的Cgroup Driver

    1. vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
    2. –-cgroup-driver=systemd
    3. #添加或修改
    1. systemctl daemon-reload
    2. systemctl restart docker
    3. systemctl restart kubelet

  • 相关阅读:
    二维码登录的原理
    JavaEE--线程基础(中)
    【气动学】基于matlab GUI弹道问题(含初始角度、速度、空气阻力、水平风)【含Matlab源码 2117期】
    APK 逆向工程 - 解析 apk 基本信息和方法调用图
    stm32f4xx-定时器
    【Java】网络编程--Socket与TCP网络通信编程
    AUTOSAR之网络管理API定义
    close excel by keyword 根据关键字关闭 excel 窗口 xlwings 方式实现
    linux 压缩webfile文件夹 webfile.tar.gz和webfile.tar的区别
    微信小程序毕业设计题目学生公寓生活管理系统+后台管理系统|前后分离VUE.js
  • 原文地址:https://blog.csdn.net/m0_71518373/article/details/127636001
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号