前言

k8s作为容器编排工具,简化容器管理,提升工作效率而颇受青睐。本文将介绍如何通过kubeadm安装k8s集群。

一.环境准备

Kubenetes支持在物理服务器或虚拟机中运行。这里准备三台安装了centos系统的物理机。

IP地址 节点角色 CPU Memory Hostname
172.17.0.12 master >=2c >=2G k8s-master
172.10.0.15 worker >=2c >=2G k8s-node-1
172.10.0.18 worker >=2c >=2G k8s-node-2

注:以下操作需要在每台主机上操作

1.修改主机名,在master节点执行

  1. hostnamectl set-hostname k8s-master

剩下的工作节点,执行 hostnamectl set-hostname k8s-*即可

2.编辑 /etc/hosts 文件,添加域名解析

  1. cat <<EOF >>/etc/hosts
  2. 172.17.0.12 k8s-master
  3. 172.10.0.15 k8s-node-1
  4. 172.10.0.18 k8s-node-2
  5. EOF

注意:这里的IP(172.17.0.*)根据自个的真实内网ip而定

3.关闭防火墙,swap,和selinux。

  1. systemctl stop firewalld
  2. systemctl disable firewalld
  3. setenforce 0
  4. sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  5. swapoff -a
  6. sed -i 's/.*swap.*/#&/' /etc/fstab

4.配置内核参数,将桥接的IPv4流量传递到iptables的链

  1. cat > /etc/sysctl.d/k8s.conf <<EOF
  2. net.bridge.bridge-nf-call-ip6tables = 1
  3. net.bridge.bridge-nf-call-iptables = 1
  4. EOF
  5. sysctl --system

5.配置国内yum源(如果你的服务器是国外这步骤可以省略)

  1. yum install -y wget
  2. mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
  3. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
  4. wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
  5. yum clean all && yum makecache

6.配置国内Kubernetes源(如果你的服务器是国外这步骤可以省略)

  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

7.配置docker源(如果你的服务器是国外这步骤可以省略)

  1. wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

二.安装

注:以下操作需要在每台主机上操作

1.安装docker


  1. yum install -y docker-ce
  2. systemctl enable docker && systemctl start docker

验证docker是否安装成功

  1. docker -version

2.安装kubeadm,kubelet,kubectl

  1. yum install -y kubelet kubeadm kubectl
  2. systemctl enable kubelet


  • Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。
  • Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。
  • Kubectl是Kubernetes集群管理工具。

    三.master节点部署

    注:以下操作只需要在master节点上进行即可

    1.kubernetes集群初始化。

  1. kubeadm init --kubernetes-version=1.18.0 \--apiserver-advertise-address=172.17.0.12 \--image-repository registry.aliyuncs.com/google_containers \--service-cidr=10.1.0.0/16 \--pod-network-cidr=10.244.0.0/16

命令解析:

  • —pod-network-cidr: 定义pod网段为:10.244.0.0/16
  • —apiserver-advertise-address:master主机内网IP地址
  • —image-repository:指定阿里云镜像仓库地址。由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址。(国外主机可以不用设定)

集群初始化会出现如下结果
image.png

右上图可以看到:

  1. kubeadm join 172.17.0.12:6443 --token xj9dg2.3kwxfqwvnovx8l4o \
  2. --discovery-token-ca-cert-hash sha256:8e66d889f00b8b24e72e45927f773cf90fc7a75c5608f15502d86a7940d0b629

记录该信息,此信息以后添加的各个工作节点都需要

2.配置kubectl工具

  1. mkdir -p /root/.kube
  2. cp /etc/kubernetes/admin.conf /root/.kube/config

3.部署Flannel网络

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

四.工作node节点部署

注:在所有node节点执行上文master节点部署成功后生成的信息

  1. kubeadm join 172.17.0.12:6443 --token xj9dg2.3kwxfqwvnovx8l4o \
  2. --discovery-token-ca-cert-hash sha256:8e66d889f00b8b24e72e45927f773cf90fc7a75c5608f15502d86a7940d0b629

不出意外即可看到如下信息
image.png

五.集群验证

注:以下操作只需要在master节点上进行即可

1.检查集群状态

  1. kubectl get nodes

结果如下:
image.png
观察STATUS,如果为Ready时,则说明集群状态正常。

2.创建Pod验证

  1. kubectl create deployment nginx --image=nginx
  2. kubectl expose deployment nginx --port=80 --type=NodePort
  3. kubectl get pod,svc

执行结果如下,则集群健康
image.png