集群搭建方案

  1. minikube
  2. kubeadmin
  3. 二进制安装
  4. 命令行工具

minikube

minikube 是一个工具, 能让你在本地运行 Kubernetes。 minikube 在你的个人计算机(包括
Windows、macOS 和 Linux PC)上运行一个一体化(all-in-one)或多节点的本地 Kubernetes 集群,以便你来尝试 Kubernetes
或者开展每天的开发工作。

官方安装文档

kubeadmin(重点)

你可以使用 kubeadm 工具来创建和管理
Kubernetes 集群。 该工具能够执行必要的动作并用一种用户友好的方式启动一个可用的、安全的集群。

安装 kubeadm 展示了如何安装
kubeadm 的过程。一旦安装了 kubeadm,
你就可以使用它来创建一个集群

1、服务器要求

  • 3 台服务器(虚拟机)

    • k8s-master:192.168.113.120
    • k8s-node1:192.168.113.121
    • k8s-node2:192.168.113.122
  • 最低配置:2核、2G内存、20G硬盘

  • 最好能联网,不能联网的话需要有提供对应镜像的私有仓库

2、软件环境

  • 操作系统:CentOS 7
  • Docker:20+
  • k8s:1.23.6

3、安装步骤

  1. 初始操作

    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
    29
    30
    31
    32
    33
    34
    35
    36
    # 关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld

    # 关闭selinux
    sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
    setenforce 0 # 临时

    # 关闭swap
    swapoff -a # 临时
    sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久

    # 关闭完swap后,一定要重启一下虚拟机!!!
    # 根据规划设置主机名
    hostnamectl set-hostname <hostname>

    # 在master添加hosts
    cat >> /etc/hosts << EOF
    192.168.113.120 k8s-master
    192.168.113.121 k8s-node1
    192.168.113.122 k8s-node2
    EOF


    # 将桥接的IPv4流量传递到iptables的链
    cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF

    sysctl --system # 生效


    # 时间同步
    yum install ntpdate -y
    ntpdate time.windows.com
  2. 安装基础软件(所有节点)

    1. 安装Docker

      基于文档中的安装 Docker 文件进行安装,见附

    2. 添加阿里云yum源

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      cat > /etc/yum.repos.d/kubernetes.repo << EOF
      [kubernetes]
      name=Kubernetes
      baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
      enabled=1
      gpgcheck=0
      repo_gpgcheck=0

      gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      EOF
    3. 安装kubeadmin、kubelet、kubectl

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

      systemctl enable kubelet

      # 配置关闭 Docker 的 cgroups,修改 /etc/docker/daemon.json,加入以下内容
      "exec-opts": ["native.cgroupdriver=systemd"]

      # 重启 docker
      systemctl daemon-reload
      systemctl restart docker
  3. 部署 Kubernetes Master

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    \# 在 Master 节点下执行

    kubeadm init \
    --apiserver-advertise-address=192.168.113.120 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.23.6 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16

    # 查询是否启动成功
    systemctl get kubelet

    # 如果启动失败,则用journalctl -xefu kubectl

    # 安装成功后,复制如下配置并执行
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    kubectl get nodes
  4. 加入 Kubernetes Node

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    分别在 k8s-node1 和 k8s-node2 执行

    # 下方命令可以在 k8s master 控制台初始化成功后复制 join 命令

    kubeadm join 192.168.113.120:6443 --token w34ha2.66if2c8nwmeat9o7 --discovery-token-ca-cert-hash sha256:20e2227554f8883811c01edd850f0cf2f396589d32b57b9984de3353a7389477



    # 如果初始化的 token 不小心清空了,可以通过如下命令获取或者重新申请
    # 如果 token 已经过期,就重新申请
    kubeadm token create

    # token 没有过期可以通过如下命令获取
    kubeadm token list

    # 获取 --discovery-token-ca-cert-hash 值,得到值后需要在前面拼接上 sha256:
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
    openssl dgst -sha256 -hex | sed 's/^.* //'
  5. 部署 CNI 网络插件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 在 master 节点上执行
    # 下载 calico 配置文件,可能会网络超时
    curl https://docs.projectcalico.org/manifests/calico.yaml -O

    # 修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的 cidr 相同

    # 修改 IP_AUTODETECTION_METHOD 下的网卡名称
    暂时没有找到的也不用修改

    # 删除镜像 docker.io/ 前缀,避免下载过慢导致失败
    sed -i 's#docker.io/##g' calico.yaml
  6. 测试 kubernetes 集群

    1
    2
    3
    4
    5
    6
    7
    8
    \# 创建部署
    kubectl create deployment nginx --image=nginx

    \# 暴露端口
    kubectl expose deployment nginx --port=80 --type=NodePort

    \# 查看 pod 以及服务信息
    kubectl get pod,svc

二级制安装

利用 k8s 官方 github 仓库下载二进制包安装,安装过程较复杂,但相对较为稳定,推荐生产环境使用。