• (一)基于centos7.9安装最新版本kubernetes(1.25.2)


    曾一度羡慕的眼神看运维各种吹牛*k8s的种种,今天自己试下搭建k8s,随便找了台i5+16G+256G的机器,安装vmware16,用虚拟机搭建k8s环境

    硬件环境

    每台机器分配2*2个CPU

    每台机器分配4G内存

    每台机器分配20G空间(草率了,最终在master节点进行了硬盘扩容,建议master不低于40G)

    网络:桥接网络,直接连接物理网络

    准备工作

    1:兼容的 Linux 的主机或虚拟机。本文Kubernetes 项目基于centos7系统,内核5.4。

    2:每台机器至少2 个 CPU、 2 GB内存(网上其他大佬总结经验之谈)

    3:集群中所有机器之间的完整网络连接(公共或专用网络都可以,本文为验证环境,内网独立IP)。

    4:机器上的部分端口是需要开放的(本环境为验证操作,关闭防火墙 systemctl stop firewalld);

    5:交换Swap分区禁用。必须禁用Swap才能使 kubelet 正常工作(swapoff -a)。

    6:所有机器的机器名需独立( hostnamectl set-hostname master01   设置名称为master01)

    最终我的服务器配置

    192.168.0.250  master00   2核*2个cpu + 4G 内存

    192.168.0.251  master01 2核*2个cpu + 4G 内存

    192.168.0.252  node01 2核*2个cpu + 4G 内存

    192.168.0.253  node02 2核*2个cpu + 4G 内存

    192.168.0.254  master02 2核*2个cpu + 4G 内存 (开始并未计划加入该节点,后续为了记录本博文部署该节点)

    需要开放的端口

    协议

    方向

    端口范围

    目的

    使用者

    TCP

    入站

    6443

    Kubernetes API 服务器

    全部

    TCP

    入站

    2379-2380

    etcd 服务器客户端 API

    kube-apiserver, etcd

    TCP

    入站

    10250

    Kubelet API

    自我,控制平面

    TCP

    入站

    10259

    kube-调度器

    自己

    TCP

    入站

    10257

    kube-控制器-管理器

    自己

    虽然 etcd 端口包含在控制平面部分,但您也可以在外部或自定义端口上托管自己的 etcd 集群

    协议

    方向

    端口范围

    目的

    使用者

    TCP

    入站

    10250

    Kubelet API

    自我,控制平面

    TCP

    入站

    30000-32767

    NodePort端口范围

    全部

    可以覆盖所有默认端口号。当使用自定义端口时,这些端口需要打开而不是此处提到的默认值。

    一个常见的例子是 API 服务器端口,有时会切换到 443。或者,默认端口保持原样,API 服务器放在负载均衡器后面,该负载均衡器监听 443 并将请求路由到默认端口上的 API 服务器。

    一:修改每台机器的hosts文件

    1. # vim /etc/hosts
    2. 192.168.0.250 master00
    3. 192.168.0.251 master01
    4. 192.168.0.252 node01
    5. 192.168.0.253 node02
    6. 192.168.0.254 master02

    二:关闭swap分区以及防火墙

    1. [root@master02 ~]# swapoff -a
    2. [root@master02 ~]# echo "vm.swappiness = 0" >> /etc/sysctl.conf
    3. [root@master02 ~]# vim /etc/fstab# /dev/mapper/rl-swap none swap defaults 0 0
    4. [root@master02 ~]# systemctl stop firewalld && systemctl disable firewalld # 关闭并且禁用防火墙

    所有机器均操作完成后,均重启reboot

    三:Containerd的基础安装和操作,此处正式开始安装环境

    本文档后续基于Containerd+RockyLinux+Kubeadmin部署Kubernetes1.25.2版本的环境。

    containerd

    Docker

    CRI-O

    需要注意的是,根据Kubernetes官方给出的公告。Kubernetes 1.20x版本将会废弃对Docker的支持(https://kubernetes.io/docs/setup/)。

    1:国内因为墙的原因无法访问k8s.io或者访问极慢,本文通过通过阿里云镜像源安装

    1. [root@master02 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
    2. [root@master02 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    3. [root@master02 ~]# yum -y install containerd.io
    4. [root@master02 ~]# containerd -v
    5. containerd containerd.io 1.6.8 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6

     

     

     

    2:生成containerd的配置文件 

     台主机全部执行此操作

    默认情况下在/etc/containerd/config.toml已经有这个文件了,但是里面是一些简短的配置.

    1. [root@master02 ~]# mkdir - /etc/containerd/
    2. [root@master02 ~]# containerd config default | tee /etc/containerd/config.toml # 生成contained的默认配置

    3:修改sandbox_img

    台主机全部执行此操作由于部分用户无法进入k8s.gcr.io资源地址,需要对此地址进行替换.

    1. [root@master02 ~]# vim /etc/containerd/config.toml
    2. sandbox_image = "k8s.gcr.io/pause:3.6" # 找到此选项并且修改为: registry.aliyuncs.com/google_containers/pause:3.6
    3. SystemdCgroup = true # Cgroup改为tre
    4. runtime_type = "io.containerd.runtime.v1.linux" # 修改为io.containerd.runtime.v1.linux

    4:启动containerd

    台主机全部执行此操作(保证Active: active(running)的状态即可

    1. [root@master02 ~]# vim /etc/containerd/config.toml
    2. Press ENTER or type command to continue
    3. [root@master02 ~]# systemctl restart containerd
    4. [root@master02 ~]#
    5. [root@master02 ~]# systemctl enable containerd
    6. Created symlink from /etc/systemd/system/multi-user.target.wants/containerd.service to /usr/lib/systemd/system/containerd.service.
    7. [root@master02 ~]#
    8. [root@master02 ~]# systemctl status containerd
    9. ● containerd.service - containerd container runtime
    10. Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; vendor preset: disabled)
    11. Active: active (running) since Mon 2022-10-10 02:25:06 +0330; 18s ago
    12. Docs: https://containerd.io
    13. Main PID: 1961 (containerd)
    14. CGroup: /system.slice/containerd.service
    15. └─1961 /usr/bin/containerd
    16. Oct 10 02:25:06 master02 containerd[1961]: time="2022-10-10T02:25:06.823804392+03:30" level=info msg="Start subscribing containerd event"
    17. Oct 10 02:25:06 master02 containerd[1961]: time="2022-10-10T02:25:06.823850033+03:30" level=info msg="Start recovering state"
    18. Oct 10 02:25:06 master02 containerd[1961]: time="2022-10-10T02:25:06.823902935+03:30" level=info msg="Start event monitor"
    19. Oct 10 02:25:06 master02 containerd[1961]: time="2022-10-10T02:25:06.823906795+03:30" level=info msg=serving... address=/run/containerd/containerd.sock.ttrpc
    20. Oct 10 02:25:06 master02 containerd[1961]: time="2022-10-10T02:25:06.824004720+03:30" level=info msg=serving... address=/run/containerd/containerd.sock
    21. Oct 10 02:25:06 master02 containerd[1961]: time="2022-10-10T02:25:06.823933756+03:30" level=info msg="Start snapshots syncer"
    22. Oct 10 02:25:06 master02 containerd[1961]: time="2022-10-10T02:25:06.824144920+03:30" level=info msg="Start cni network conf syncer for default"
    23. Oct 10 02:25:06 master02 containerd[1961]: time="2022-10-10T02:25:06.824157462+03:30" level=info msg="Start streaming server"
    24. Oct 10 02:25:06 master02 containerd[1961]: time="2022-10-10T02:25:06.824251378+03:30" level=info msg="containerd successfully booted in 0.025993s"
    25. Oct 10 02:25:06 master02 systemd[1]: Started containerd container runtime.
    26. [root@master02 ~]#

    5:配置IP转发

    1. cat <<EOF | tee /etc/modules-load.d/kubernetes1.24.conf
    2. overlay
    3. br_netfilter
    4. EOF
    5. cat <<EOF | tee /etc/sysctl.d/kubernetes1.24-forsys.conf
    6. net.bridge.bridge-nf-call-iptables = 1
    7. net.bridge.bridge-nf-call-ip6tables = 1
    8. net.ipv4.ip_forward = 1
    9. EOF
    10. [root@master02 ~]# modprobe br_netfilter
    11. [root@master02 ~]#
    12. [root@master02 ~]# sysctl --system

    6:安装 Kubernetes (五台全部安装)

    由于官网未开放同步方式, 可能会有索引gpg检查失败的情况, 这时请用 yum install -y --nogpgcheck kubelet kubeadm kubectl 安装

    1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    2. [kubernetes]
    3. name=Kubernetes
    4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    5. enabled=1
    6. gpgcheck=1
    7. repo_gpgcheck=1
    8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    9. EOF
    10. [root@master02 ~]# yum install -y --nogpgcheck kubelet kubeadm kubectl

     

     可以通过yum --showduplicates list kubelet查看当前仓库中可用的版本

    7:安装命令提示(安装后可以使用tab进行快捷提示)

    1. [root@master02 ~]# yum -y install bash-completion
    2. [root@master02 ~]# source <(kubeadm completion bash) && source <(kubectl completion bash)

     

     

    如果要永久生效,则修改.bashrc

     

    8:启动kubelet

    1. [root@master02 ~]# systemctl enable kubelet
    2. [root@master02 ~]# systemctl start kubelet

     

    9:初始化集群配置信息

    1. [root@master02 ~]# kubeadm config print init-defaults > init.yaml
    2. [root@master02 ~]# vim init.yaml #修改如截图

     

    修改完后执行初始化

    1. # 初始化等待镜像Pull完成
    2. [root@master02 ~]# kubeadm init --config=init.yaml

     初始化完成后如截图:

    10:创建admin配置目录

    1. [root@master02 ~]# mkdir -p $HOME/.kube
    2. [root@master02 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    3. [root@master02 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

     11:创建集群网络

    因为flannel不支持网络隔离以及其他策略所以使用calico网络

    [root@master02 ~]# curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O

     

    1. [root@master02 ~]# curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
    2. [root@master02 ~]# vim calico.yaml
    3. - name: CALICO_IPV4POOL_CIDR # 修改CIDR为Kubernetes的子网地址,即初始化集群的serviceSubnet
    4. value: "10.96.0.0/12"

    12:创建calico网络

    [root@master02 ~]# kubectl apply -f calico.yaml 

    13:加入集群

    如果初始化成功会出现

    Your Kubernetes control-plane has initialized successfully!

     节点执行加入集群命令:

    [root@master02 ~]# kubeadm join 192.168.0.250:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:99c57b0e86024ed9a41a227e9cba03bc464024cf9ca50287ff80bfe4801748a1

    注意如若出现,如截图:

     

    1. 执行重置操作,并重新加入集群即可:
    2. [root@master02 ~]# kubeadm reset

    14:Master验证加入k8s集群

    从master上查看节点是否已经全部Ready,

    [root@master00 .kube]# kubectl get nodes

     

    查看master节点的Pod是否全部启动

     

    注意:

    1:遇到token过期

    默认情况下,该token只有24小时,如果token值过期的话需要重新生成,查看当前master集群的token列表

    1. [root@master00 .kube]# kubeadm token list
    2. TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
    3. qyb9cq.i985wud0yuhhmxal 20h 2022-10-11T13:32:57Z authentication,signing system:bootstrappers:kubeadm:default-node-token

     

    重新生成一份token

    [root@master00 .kube]# kubeadm token create
    

     

    上述一套k8s集群基础部署完成,其中其他节点最先部署完成,本文执行的命令基于最后新加入的0.254机器,机器名master02.

    在学习过程中遇到部分问题偶然遇上可供参观大佬的博文,在此十分感谢大佬,链接:https://zhuanlan.zhihu.com/p/565029907

  • 相关阅读:
    计算机毕业设计基于springboot+vue+elementUI的医院急诊系统(前后端分离)
    java毕业设计面向对象程序设计课程网站源码+lw文档+mybatis+系统+mysql数据库+调试
    shell脚本使用(宿主机windows-服务器-centos)--用于使用shell脚本方式控制docker容器
    (附源码)计算机毕业设计ssm 基于Java宠物寄存管理系统
    目标检测:cocoeval中的evaluateImg,accumulate函数解析
    virtualbox无界面打开linux虚拟机的bat脚本,以及idea(代替Xshell)连接linux虚拟机的方法
    【雷丰阳-谷粒商城 】课程概述
    阿里云CDN实践
    2022-08-11 第六小组 瞒春 学习笔记
    Pytorch使用c++调用模型
  • 原文地址:https://blog.csdn.net/goodlook0123/article/details/127418315