• kubernetes 安装与部署


    kubernetes 安装与部署

    • 环境almalinux,centos,rockylinux,redhat的9.1版本
    • 使用containerd容器运行时
    • kubernetes v1.25.4
    • root用户

    1.设置主机名
    2.禁用防火墙
    3.禁用selinux
    4.禁用swap
    5.同步时间
    5.桥接流量
    6.安装nerdctl-full
    7.确认cgroup驱动默认为systemd
    8.安装kubeadm,kubectl,kubelet
    9.kubeadm创建集群
    10.安装网络插件


    设置主机名

    # 避免多节点,主机名重复
    hostnamectl set-hostname <main>
    
    • 1
    • 2

    禁用防火墙

    systemctl stop firewalld
    systemctl disable firewalld
    
    • 1
    • 2

    禁用selinux

    # 和kubelet有关
    # 永久禁用
    sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
    
    # 临时,配置即时生效
    setenforce 0 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    禁用swap分区

    # 和kubelet有关
    # 永久禁用
    sed -i 's/.*swap.*/#&/' /etc/fstab
    # sed -i '/swap/d' /etc/fstab
    
    # 临时,配置即时生效
    swapoff -a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    同步时间

    # 这个... 不设置也可以
    
    • 1

    桥接流量

    # 和流量监控有关
    # 转发 IPv4 并让 iptables 看到桥接流量
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    overlay
    br_netfilter
    EOF
    
    sudo modprobe overlay
    sudo modprobe br_netfilter
    
    # 设置所需的 sysctl 参数,参数在重新启动后保持不变
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-iptables  = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward                 = 1
    EOF
    
    # 应用 sysctl 参数而不重新启动
    sudo sysctl --system
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    安装nerdctl-full

    # nerdctl-full包含nerdctl,containerd,cni等
    # nerdctl 替代docker命令
    # containerd 容器运行时
    # cni 网络实现相关
    # https://github.com/containerd/nerdctl`https://github.com/containerd/nerdctl/releases` 下载 nerdctl-full-1.0.0-linux-amd64.tar.gz
    
    # 安装
    tar Cxzvvf /usr/local nerdctl-full-1.0.0-linux-amd64.tar.gz
    
    # 设置为默认容器运行时,root用户执行,非root参考官方文档
    sudo systemctl enable --now containerd
    crictl config runtime-endpoint unix:///run/containerd/containerd.sock
    crictl config image-endpoint unix:///run/containerd/containerd.sock
    
    # 修改拉取镜像的配置,避免error: RunPodSandbox
    vi /etc/containerd/config.toml
    找到sandbox_image修改为registry.aliyuncs.com/google_containers/pause:3.8
    
    [plugins]
      ...
    
      [plugins."io.containerd.grpc.v1.cri"]
        ...
        sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"
    
    
    • 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

    cni初始化

    # 不初始化,kublet运行时候会有error:NetworkPluginNotReady
    # 配置参考 https://github.com/containernetworking/cni
    mkdir -p /etc/cni/net.d
    
    cat >/etc/cni/net.d/10-mynet.conf <<EOF
    {
    	"cniVersion": "0.2.0",
    	"name": "mynet",
    	"type": "bridge",
    	"bridge": "cni0",
    	"isGateway": true,
    	"ipMasq": true,
    	"ipam": {
    		"type": "host-local",
    		"subnet": "10.22.0.0/16",
    		"routes": [
    			{ "dst": "0.0.0.0/0" }
    		]
    	}
    }
    EOF
    $ cat >/etc/cni/net.d/99-loopback.conf <<EOF
    {
    	"cniVersion": "0.2.0",
    	"name": "lo",
    	"type": "loopback"
    }
    EOF
    
    • 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

    systemd设置

    # 可以跳过,containerd默认是systemd
    # 手动设置参考:https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/
    
    • 1
    • 2

    安装kubeadm,kubectl,kubelet

    # kubeadm:用来初始化集群的指令
    # kubelet:在集群中的每个节点上用来启动 Pod 和容器等
    # kubectl:用来与集群通信的命令行工具
    
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    setenforce 0
    yum install -y kubelet kubeadm kubectl
    systemctl enable kubelet && systemctl start kubelet
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    kubeadm创建集群

    # 以下3个命令都行,默认用第一个就行
    kubeadm init --image-repository registry.aliyuncs.com/google_containers
    
    kubeadm init --pod-network-cidr 10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
    
    kubeadm init --apiserver-advertise-address=10.0.35.12 --control-plane-endpoint=10.0.35.12 --pod-network-cidr 10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
    
    # 留意安装成功的提示信息,需要配置KUBECONFIG
    export KUBECONFIG=/etc/kubernetes/admin.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    安装 Pod 网络附加组件

    flannel和calico都可以,如果是虚拟机可以考虑flannel
    flannel: https://github.com/flannel-io/flannel
    calico:https://github.com/projectcalico/calico
    cilium:https://github.com/cilium/cilium
    
    • 1
    • 2
    • 3
    • 4

    查看pods

    kubectl get pods --all-namespaces
    
    • 1

    监控kubelet日志

    # 日志监控命令
    journalctl -u kubelet -f
    
    • 1
    • 2

    error

    可参考:https://dev.fir8.com/app/kubernetes/k8s125.html


    注:封面图片由AI生成
    AI绘画

  • 相关阅读:
    如何加快Chrome谷歌浏览器下载速度?
    linux 设置在连续输错错误密码n次后,锁定该用户
    Python "爬虫"出发前的装备之一正则表达式
    【uniapp小程序】uploadFile文件上传
    HTML+CSS+JS制作结婚邀请函代码(程序员专属情人节表白网站)
    springboot3:web开发
    西米支付”:在游戏SDK中,提供了哪些支付渠道?SDK的用处?
    Win7纯净版系统镜像64位介绍
    数据结构(11)图的遍历,DFS、BFS的JAVA实现
    Spring Boot底层原理
  • 原文地址:https://blog.csdn.net/holdlg/article/details/127981590