• 基于 kubeadm 的 k8s(1.24.x) 安装过程


    基本信息如下:

    1. 操作系统:debian 11
    2. k8s 版本:k8s 1.24.3
    3. 容器管理:docker
    4. 模式:1 master, n nodes(n > 0)

    前置条件(master&node)

    建议不要使用 root 用户权限直接操作。为了当前用户可以使用 docker,可以执行如下命令

    # 将当前用户添加到 docker 分组
    sudo usermod -aG docker `whoami`
    # 切换当前默认分组为 docker
    newgrp docker
    
    • 1
    • 2
    • 3
    • 4
    1. 安装最新版 docker engine
    2. 配置 /etc/docker/daemon.json
    {
      "registry-mirrors": [
        "https://registry.cn-hangzhou.aliyuncs.com",
        "https://registry.docker-cn.com"
      ],
      "log-driver": "json-file",
      "exec-opts": ["native.cgroupdriver=systemd"],
      "storage-driver": "overlay2"
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 安装 cri-dockerd。一种方式是下载源码自己编译 (推荐);另一种方式是下载编译好的 release,然后放到 /usr/bin
    2. 依次执行如下指令
    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
    1. 关闭 swap 交换分区。调用 swapoff 和修改 /etc/fstab
    2. 分别修改 masternodes 的 hostname。hostnamectl set-hostname
    3. 安装工具 sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common

    镜像地址

    namesite
    清华镜像站https://mirror.tuna.tsinghua.edu.cn
    阿里云 k8s 和其他谷歌镜像registry.cn-hangzhou.aliyuncs.com/google_containers
    阿里云 docker 仓库https://registry.cn-hangzhou.aliyuncs.com
    七牛 go 仓库https://goproxy.cn/

    安装 kubeadm

    参照官方文档

    如果要使用国内镜像,请参照如下配置

    curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
    
    cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/kubernetes-xenial main
    EOF
    
    sudo apt update
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    初始化(master)

    使用如下命令,可以查看 k8s 依赖的镜像列表

    kubeadm config image list --kubernetes-version v1.24.3
    
    • 1
    # demo 根据情况自己修改
    # 建议在有连接外网能力的机器上执行。测试时,使用内网环境一直失败
    # 如果网络不好,建议先从 harbor 下载镜像,然后把 `--image-repository` 替换成阿里镜像
    # (可选)--apiserver-advertise-address 可以用来指定使用哪块网卡对外提供服务(多网卡时使用)
    # (可选)--kubernetes-version 指定 kubernetes 的版本号
    kubeadm init --cri-socket unix:///var/run/cri-dockerd.sock --image-repository itools-harbor.weichai.com/google_containers --pod-network-cidr=172.20.0.0/16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    安装 flannel cni。

    如果自定义了 --pod-network-cidr,则需要修改 flannel 配置文件中 Network 字段为相同值
    如果有多个网卡,需要通过 iface 字段指定要使用哪个网卡用于通信

    kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
    
    • 1

    安装 ingress 控制器

    官方有一个控制器列表。一般会使用基于 nginx 的控制器。

    nginx 控制器,常用的有三个版本:一个是 F5(商业版 nginx)团队开发的,需要付费使用;一个是 nginx 维护的开源版本;另一个是 kubernetes 维护的开源版本

    使用 ingress

    因为控制器也是 pod,所以需要暴露给外部网络才可以使用。一般使用的方法有:创建 NodePort 类型的 Service;或者使用 kubectl port-forward 命令。如果是在云服务器上,还可以使用 LoadBalancer 类型的 service。

    然后创建对应的 IngressClassIngress。需要注意的是,IngressClass 没有 namespace 但是 Ingress 要和对应的 Service 在同一个 namespace 下。

    可以使用如下命令进行调试

    kubectl port-forward -n <namespace> <pod name> <local host port>:<pod port> &
    # 假设虚拟域名为 test.tt
    curl -L --resolve test.tt:<local host port>:127.0.0.1 http://test.tt:<local host port>
    
    • 1
    • 2
    • 3

    小技巧

    # 创建默认配置
    export out="--dry-run=client -o yaml"
    kubectl create <kind> <name> <options> $out
    # demo
    kubectl create ing ngx-ing --rule="ngx.test/=ngx-svc:80" --class=ngx-ink $out
    
    # 生成 pod 配置
    kubectl run ngx --image=nginx:alpine $out
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # 本地查看 yaml 格式说明
    kubectl explain pod
    kubectl explain pod.metadata
    kubectl explain pod.spec.containers
    
    • 1
    • 2
    • 3
    • 4
    # 查看 api 列表
    kubectl api-resources
    # 输出如下内容
    # NAME  SHORTNAMES  APIVERSION  NAMESPACED  KIND
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    9.strspn函数
    管理多个Instagram帐户防关联小技巧大分享
    图解LeetCode——1408. 数组中的字符串匹配(难度:简单)
    [点云分割] 圆柱体分割
    JSP 如何获取request对象中的路径信息呢?
    视频怎么转换为音频文件?快来掌握这几种方式
    AWS SES发送邮件如何正确配置?操作指南?
    Vue实现简易购物车功能
    信息安全技术实验:软件的动态分析和破解
    链接服务器导致SQL Server停止响应
  • 原文地址:https://blog.csdn.net/kaiyuanheshang/article/details/126265251