首页 Kubernetes(k8s)搭建
文章
取消

Kubernetes(k8s)搭建

Kubernetes搭建1

1 搭建k8s环境平台规则

1.1. 单master集群

image-20230523224331893

1.2. 多master集群

image-20230523224342111

2 硬件服务器配置要求

2.1. 测试环境

  1. master:2核 4G内存 20G磁盘
  2. node:4核 8G内存 40G磁盘

3 搭建k8s集群的部署方式

3.1. kubeadm

Kubeadm 是一个 K8s 部署工具, 提供 kubeadm init 和 kubeadm join, 用于快速部署 Kubernetes 集群。

  1. 安装3台centos7虚拟机

    • 2G-RAM 2-Core 30GB-Disk
    • 集群间网络之间互通
    • 可访问外网
    • 禁用swap分区

    image-20230605190839754

  2. 对三台虚拟机进行初始化操作

    • 关闭防火墙

      1
      2
      
      $ systemctl stop firewalld
      $ systemctl disable firewalld  
      
    • 关闭selinux

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

      1
      2
      
      $ swapoff -a # 临时
      $ vim /etc/fstab # 永久
      
    • 配置主机名

      1
      
      $ hostnamectl set-hostname <hostname>
      
    • 在 master 添加 hosts

      ```shell $ cat » /etc/hosts « EOF 192.168.8.11 k8smaster 192.168.8.101 k8snode1 192.168.8.102 k8snode2 EOF

    • 将桥接的 IPv4 流量传递到 iptables 的链

      1
      2
      3
      4
      5
      
      $ cat > /etc/sysctl.d/k8s.conf << EOF
      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      EOF
      $ sysctl --system # 生效
      
    • 时间同步

      1
      2
      
      $ yum install ntpdate -y
      $ ntpdate time.windows.com
      
    • 所有节点安装 Docker/kubeadm/kubelet

      • docker

        1. 安装docker

          1
          2
          3
          4
          
          $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
          $ yum -y install docker-ce-18.06.1.ce-3.el7
          $ systemctl enable docker && systemctl start docker
          $ docker --version
          
        2. 设置docker镜像加速器

          1
          2
          3
          4
          5
          
          $ cat > /etc/docker/daemon.json << EOF
          {
          	"registry-mirrors": ["https://g41et2nr.mirror.aliyuncs.com"]
          } 
          EOF
          
      • 安装 kubeadm, kubelet 和 kubectl

        1. 添加 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
          
        2. 安装 kubeadm, kubelet 和 kubectl

          1
          2
          
          $ yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
          $ systemctl enable kubelet
          
    • 部署 Kubernetes Master

      1. 在master执行 master

        由于默认拉取镜像地址 k8s.gcr.io 国内无法访问, 这里指定阿里云镜像仓库地址

        apiserver当前节点IP
        image-repository镜像仓库
        kubernetes-versionk8s版本
        service-cidrservice子网
        pod-network-cidrpod子网
        1
        2
        3
        4
        5
        6
        
        $ kubeadm init \
        --apiserver-advertise-address=192.168.8.11 \
        --image-repository registry.aliyuncs.com/google_containers \
        --kubernetes-version v1.18.0 \
        --service-cidr=10.96.0.0/12 \
        --pod-network-cidr=10.244.0.0/16
        
      2. 使用 kubectl 工具 master

        1
        2
        3
        4
        
        $ 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 node	#查看node节点
        
      3. 安装 Pod 网络插件( CNI )master

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        
        $ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
        $ kubectl get pods -n kube-system
        NAME                                READY   STATUS    RESTARTS   AGE
        coredns-7ff77c879f-7nhpx            1/1     Running   0          9m58s
        coredns-7ff77c879f-j8cvb            1/1     Running   0          9m58s
        etcd-k8smaster                      1/1     Running   0          10m
        kube-apiserver-k8smaster            1/1     Running   0          10m
        kube-controller-manager-k8smaster   1/1     Running   0          10m
        kube-proxy-hjc7m                    1/1     Running   0          4m48s
        kube-proxy-k2h99                    1/1     Running   0          4m39s
        kube-proxy-zrvtj                    1/1     Running   0          9m58s
        kube-scheduler-k8smaster            1/1     Running   0          10m         
        
    • 加入 Kubernetes Node

      1. 在node节点join 到master node

        默认token有效时间为24小时,当过期之后,该token就不可用了。这时就需要重新创建token

        1
        
        $ kubeadm token create --print-jion-command
        
        1
        2
        
        $ kubeadm join 192.168.8.11:6443 --token gqicpf.wr12fuy0u0drtm6w \
            --discovery-token-ca-cert-hash sha256:b7ddb2cb04aae940f74ddf7ca70c359b3870ad8ffb88148f819499d4e308b8d1
        
    • 测试 kubernetes 集群

      在 Kubernetes 集群中创建一个 pod, 验证是否正常运行

      访问地址: http://NodeIP:Port

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      
      $ kubectl create deployment nginx --image=nginx
      $ kubectl get pod
      NAME                    READY   STATUS    RESTARTS   AGE
      nginx-f89759699-v62mc   1/1     Running   0          45s
      $ kubectl expose deployment nginx --port=80 --type=NodePort
      $ kubectl get pod,svc
      NAME                        READY   STATUS    RESTARTS   AGE
      pod/nginx-f89759699-v62mc   1/1     Running   0          77s
           
      NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
      service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        15m
      service/nginx        NodePort    10.107.238.18   <none>        80:30688/TCP   11s
      

3.2. 二进制包

从 github 下载发行版的二进制包, 手动部署每个组件, 组成Kubernetes 集群。

3.2.1. 安装要求

  1. 一台或多台机器, 操作系统 CentOS7.x-86_x64
  2. 硬件配置: 2GB 或更多 RAM, 2 个 CPU 或更多 CPU, 硬盘 30GB 或更多
  3. 集群中所有机器之间网络互通
  4. 可以访问外网, 需要拉取镜像, 如果服务器不能上网, 需要提前下载镜像并导入节点
  5. 禁止 swap 分区

3.2.2. 准备环境

  1. 软件环境

    软件版本
    操作系统CentOS7.8_x64 ( mini)
    Docker19-ce
    Kubernetes1.19
  2. 服务器规划

    角色IP组件
    k8s-master192.168.8.12kube-apiserver, kube-controller-manager, kube -scheduler, etcd
    k8s-node1192.168.8.111kubelet, kube-proxy, docker etcd
    k8s-node2192.168.8.112kubelet, kube-proxy, docker etcd

3.2.3. 操作系统初始化配置

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
# 关闭防火墙
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 # 永久
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 在 master 添加 hosts
cat >> /etc/hosts << EOF
192.168.8.12 m1
192.168.8.111 n1
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

3.2.4. 部署Etcd集群

3.2.5. 安装docker

3.2.6. 部署Master Node

3.3. 区别

Kubeadm 降低部署门槛, 但屏蔽了很多细节, 遇到问题很难排查。

如果想更容易可控, 推荐使用二进制包部署 Kubernetes 集群, 虽然手动部署麻烦点, 期间可以学习很多工作原理, 也利于后期维护。

本文由作者按照 CC BY 4.0 进行授权

Kubernetes(k8s)概述

数据结构 第一章 概论