kubernetes|二、Kubernetes集群环境的搭建

目录

1 环境规划
1.1 集群类型
1.2 安装方式
1.3 主机规划
2 环境搭建
2.1 前言
2.2 环境初始化
2.2.1 检查操作系统的版本
2.2.2 关闭防火墙和禁止防火墙开机启动
2.2.3 设置主机名
2.2.4 主机名解析
2.2.5 时间同步
2.2.6 关闭selinux
2.2.7 关闭swap分区
2.2.8 将桥接的IPv4流量传递到iptables的链
2.2.9 开启ipvs
2.2.10 重启三台机器
2.3 每个节点安装Docker、kubeadm、kubelet和kubectl
2.3.1 安装Docker
2.3.2 添加阿里云的YUM软件源
2.3.3 安装kubeadm、kubelet和kubectl
2.4 查看k8s所需镜像
2.5 部署k8s的Master节点
2.6 部署k8s的Node节点
2.7 部署CNI网络插件
3 服务部署
3.1 前言
3.2 步骤
4 kubernetes中kubectl命令自动补全

1 环境规划 1.1 集群类型

  • Kubernetes集群大致分为两类:一主多从和多主多从。
  • 一主多从:一个Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境。
  • 多主多从:多台Master和多台Node节点,搭建麻烦,安全性高,适合用于生产环境。

kubernetes|二、Kubernetes集群环境的搭建
文章图片


为了测试方便,本次搭建的是一主多从类型的集群。
1.2 安装方式
  • kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包。
  • ① minikube:一个用于快速搭建单节点的kubernetes工具。
  • ② kubeadm:一个用于快速搭建kubernetes集群的工具。
  • ③ 二进制包:从官网上下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效。
  • 我们需要安装kubernetes的集群环境,但是又不想过于麻烦,所以选择kubeadm方式。
1.3 主机规划
角色
IP地址
操作系统
配置
Master
192.168.18.100
CentOS7.8+,基础设施服务器
【kubernetes|二、Kubernetes集群环境的搭建】2核CPU,2G内存,50G硬盘
Node1
192.168.18.101
CentOS7.8+,基础设施服务器
2核CPU,2G内存,50G硬盘
Node2
192.168.18.102
CentOS7.8+,基础设施服务器
2核CPU,2G内存,50G硬盘

2 环境搭建 2.1 前言
  • 本次环境搭建需要三台CentOS服务器(一主二从),然后在每台服务器中分别安装Docker(18.06.3)、kubeadm(1.18.0)、kubectl(1.18.0)和kubelet(1.18.0)。
没有特殊说明,就是三台机器都需要执行。
2.2 环境初始化 2.2.1 检查操作系统的版本
  • 检查操作系统的版本(要求操作系统的版本至少在7.5以上):
cat /etc/redhat-release

kubernetes|二、Kubernetes集群环境的搭建
文章图片


2.2.2 关闭防火墙和禁止防火墙开机启动
  • 关闭防火墙:
systemctl stop firewalld

  • 禁止防火墙开机启动:
systemctl disable firewalld

kubernetes|二、Kubernetes集群环境的搭建
文章图片

2.2.3 设置主机名
  • 设置主机名:
hostnamectl set-hostname

  • 设置192.168.18.100的主机名:
hostnamectl set-hostname k8s-master

  • 设置192.168.18.101的主机名:
hostnamectl set-hostname k8s-node1

  • 设置192.168.18.102的主机名:
hostnamectl set-hostname k8s-node2

2.2.4 主机名解析
  • 为了方便后面集群节点间的直接调用,需要配置一下主机名解析,企业中推荐使用内部的DNS服务器。
cat >> /etc/hosts << EOF 192.168.18.100 k8s-master 192.168.18.101 k8s-node1 192.168.18.102 k8s-node2 EOF

2.2.5 时间同步
  • kubernetes要求集群中的节点时间必须精确一致,所以在每个节点上添加时间同步:
yum install ntpdate -y

ntpdate time.windows.com

2.2.6 关闭selinux
  • 查看selinux是否开启:
getenforce

  • 永久关闭selinux,需要重启:
sed -i 's/enforcing/disabled/' /etc/selinux/config

  • 临时关闭selinux,重启之后,无效:
setenforce 0

2.2.7 关闭swap分区
  • 永久关闭swap分区,需要重启:
sed -ri 's/.*swap.*/#&/' /etc/fstab

  • 临时关闭swap分区,重启之后,无效::
swapoff -a

2.2.8 将桥接的IPv4流量传递到iptables的链
  • 在每个节点上将桥接的IPv4流量传递到iptables的链:
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF

# 加载br_netfilter模块 modprobe br_netfilter

# 查看是否加载 lsmod | grep br_netfilter

# 生效 sysctl --system

2.2.9 开启ipvs
  • 在kubernetes中service有两种代理模型,一种是基于iptables,另一种是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手动载入ipvs模块。
  • 在每个节点安装ipset和ipvsadm:
yum -y install ipset ipvsadm

  • 在所有节点执行如下脚本:
cat > /etc/sysconfig/modules/ipvs.modules <
  • 授权、运行、检查是否加载:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

  • 检查是否加载:
lsmod | grep -e ipvs -e nf_conntrack_ipv4

2.2.10 重启三台机器
  • 重启三台Linux机器:
reboot

2.3 每个节点安装Docker、kubeadm、kubelet和kubectl 2.3.1 安装Docker
  • 安装Docker:
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.3.ce-3.el7

systemctl enable docker && systemctl start docker

docker version

  • 设置Docker镜像加速器:
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://du3ia00u.mirror.aliyuncs.com"], "live-restore": true, "log-driver":"json-file", "log-opts": {"max-size":"500m", "max-file":"3"}, "storage-driver": "overlay2" } EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

2.3.2 添加阿里云的YUM软件源
  • 由于kubernetes的镜像源在国外,非常慢,这里切换成国内的阿里云镜像源:
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.3.3 安装kubeadm、kubelet和kubectl
  • 由于版本更新频繁,这里指定版本号部署:
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

  • 为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容:
vim /etc/sysconfig/kubelet

# 修改 KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs"

  • 设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动:
systemctl enable kubelet

2.4 查看k8s所需镜像
  • 查看k8s所需镜像:
kubeadm config images list

kubernetes|二、Kubernetes集群环境的搭建
文章图片

2.5 部署k8s的Master节点
  • 部署k8s的Master节点(192.168.18.100):
# 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址 kubeadm init \ --apiserver-advertise-address=192.168.18.100 \ --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

kubernetes|二、Kubernetes集群环境的搭建
文章图片

kubernetes|二、Kubernetes集群环境的搭建
文章图片

  • 根据提示消息,在Master节点上使用kubectl工具:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.6 部署k8s的Node节点
  • 根据提示,在192.168.18.101和192.168.18.102上添加如下的命令:
kubeadm join 192.168.18.100:6443 --token jv039y.bh8yetcpo6zeqfyj \ --discovery-token-ca-cert-hash sha256:3c81e535fd4f8ff1752617d7a2d56c3b23779cf9545e530828c0ff6b507e0e26

kubernetes|二、Kubernetes集群环境的搭建
文章图片

  • 默认的token有效期为2小时,当过期之后,该token就不能用了,这时可以使用如下的命令创建token:
kubeadm token create --print-join-command

# 生成一个永不过期的token kubeadm token create --ttl 0 --print-join-command

2.7 部署CNI网络插件
  • 根据提示,在Master节点上使用kubectl工具查看节点状态:
kubectl get nodes

kubernetes|二、Kubernetes集群环境的搭建
文章图片

  • kubernetes支持多种网络插件,比如flannel、calico、canal等,任选一种即可,本次选择flannel,如果网络不行,可以使用本人提供的kube-flannel.yml,当然,你也可以安装calico,请点这里calico.yaml,推荐安装calico。
  • 在Master节点上获取flannel配置文件(可能会失败,如果失败,请下载到本地,然后安装):
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

  • 使用配置文件启动flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

  • 查看部署CNI网络插件进度:
kubectl get pods -n kube-system

kubernetes|二、Kubernetes集群环境的搭建
文章图片


  • 再次在Master节点使用kubectl工具查看节点状态:
kubectl get nodes

kubernetes|二、Kubernetes集群环境的搭建
文章图片

  • 查看集群健康状况:
kubectl get cs

kubernetes|二、Kubernetes集群环境的搭建
文章图片

kubectl cluster-info

kubernetes|二、Kubernetes集群环境的搭建
文章图片

3 服务部署 3.1 前言
  • 在Kubernetes集群中部署一个Nginx程序,测试下集群是否正常工作。
3.2 步骤
  • 部署Nginx:
kubectl create deployment nginx --image=nginx:1.14-alpine

  • 暴露端口:
kubectl expose deployment nginx --port=80 --type=NodePort

  • 查看服务状态:
kubectl get pods,svc

kubernetes|二、Kubernetes集群环境的搭建
文章图片

kubernetes|二、Kubernetes集群环境的搭建
文章图片

4 kubernetes中kubectl命令自动补全
yum install -y bash-completion

source /usr/share/bash-completion/bash_completion

source <(kubectl completion bash)

echo “source <(kubectl completion bash)” >> ~/.bashrc

vim /root/.bashrc

source /usr/share/bash-completion/bash_completion

source <(kubectl completion bash)

    推荐阅读