Kubernetes高可用部署方案–静态Pod篇

olei 1,787 views 1

Kubernetes高可用部署方案--静态Pod篇

环境准备

1.服务器说明

系统类型 IP地址 节点角色 CPU Memory Hostname
Centos 7.6 192.168.214.128 Master >=2G >=2G m1
Centos 7.6 192.168.214.129 Master >=2G >=2G m2
Centos 7.6 192.168.214.130 Node >=2G >=2G s1

2.系统设置

  • 主机名

    主机名必须每个节点都不一样,并且保证所有点之间可以通过hostname互相访问

# 查看主机名
$ hostname
# 修改主机名
$ hostnamectl set-hostname <your_hostname>
# 配置host,使所有节点之间可以通过hostname互相访问
$ vi /etc/hosts
# <node-ip> <node-hostname>
  • 安装依赖包
    # 更新yum
    $ yum update
    # 安装依赖包
    $ yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
  • 关闭防火墙、swap,重置iptables
    # 关闭防火墙
    $ systemctl stop firewalld && systemctl disable firewalld
    # 重置iptables
    $ iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
    # 关闭swap
    $ swapoff -a
    $ sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
    # 关闭selinux
    $ setenforce 0
    # 关闭dnsmasq(否则可能导致docker容器无法解析域名)
    $ service dnsmasq stop && systemctl disable dnsmasq
  • 系统参数设置
    # 制作配置文件
    $ cat > /etc/sysctl.d/kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    vm.swappiness=0
    vm.overcommit_memory=1
    vm.panic_on_oom=0
    fs.inotify.max_user_watches=89100
    EOF
    # 生效文件
    $ sysctl -p /etc/sysctl.d/kubernetes.conf

    3.安装docker(所有节点)

  • 如果你之前安装过 docker,请先删掉
    yum remove docker docker-common docker-selinux docker-engine
  • 安装一些依赖
    wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
  • 把软件仓库地址替换为 TUNA:
    sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
  • 安装
    yum makecache fast
    yum install docker-ce
  • 设置启动参数
    $ cat <<EOF > /etc/docker/daemon.json
    {
    # "graph": "/docker/data/path", # 可以设置docker的存储路径,默认不设置在/var/lib/docker
    "exec-opts": ["native.cgroupdriver=systemd"]
    }
    EOF
  • 启动docker
    systemctl enable docker
    systemctl start docker

    4.安装必要的工具(所有节点)

  • 工具说明
    • kubeadm: 部署集群用的命令
    • kubelet: 在集群中每台机器上都要运行的组件,负责管理pod、容器的生命周期
    • kubectl: 集群管理工具(可选,只要在控制集群的节点上安装即可)
  • 安装方法
    # 配置yum源(科学上网的同学可以把"mirrors.aliyun.com"替换为"packages.cloud.google.com")
    $ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
# 安装工具
# 找到要安装的版本号
$ yum list kubeadm --showduplicates | sort -r

# 安装指定版本(这里用的是1.14.0)
$ yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0 --disableexcludes=kubernetes

# 设置kubelet的cgroupdriver(kubelet的cgroupdriver默认为systemd,如果上面没有设置docker的exec-opts为systemd,这里就需要将kubelet的设置为cgroupfs)
# $ sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# 启动kubelet
$ systemctl enable kubelet && systemctl start kubelet

5.准备配置文件(任意节点)

  • 下载配置文件

    我这准备了一个项目,帮助大家尽量的减少了机械化的重复工作。它并不会帮你设置系统环境,不会给你安装软件。总之就是会减少你的部署工作量,但不会耽误你对整个系统的认识和把控。

$ cd ~ && git clone https://e.coding.net/olei_me/kubernetes-ha.git
# 看看git内容
$ ls -l kubernetes-ha-kubeadm
addons/
configs/
scripts/
init.sh
global-configs.properties
  • 文件说明

  • addons

    kubernetes的插件,比如calico和dashboard。

  • configs

    包含了部署集群过程中用到的各种配置文件。

  • scripts

    包含部署集群过程中用到的脚本,如keepalive检查脚本。

  • global-configs.properties

    全局配置,包含各种易变的配置内容。

  • init.sh

    初始化脚本,配置好global-config之后,会自动生成所有配置文件。

  • 生成配置

    这里会根据大家各自的环境生成kubernetes部署过程需要的配置文件。
    在每个节点上都生成一遍,把所有配置都生成好,后面会根据节点类型去使用相关的配置。

# cd到之前下载的git代码目录
$ cd kubernetes-ha-kubeadm

# 编辑属性配置(根据文件注释中的说明填写好每个key-value)
$ vi global-config.properties

# 生成配置文件,确保执行过程没有异常信息
$ ./init.sh

# 查看生成的配置文件,确保脚本执行成功
$ find target/ -type f

高可用集群部署

1.部署keepalived - apiserver高可用(任选两个master节点)

  • 安装keepalived

    # 在两个主节点上安装keepalived(一主一备)
    $ yum install -y keepalived
  • 创建keepalived配置文件

# 创建目录
$ ssh <user>@<master-ip> "mkdir -p /etc/keepalived"
$ ssh <user>@<backup-ip> "mkdir -p /etc/keepalived"

# 分发配置文件
$ scp target/configs/keepalived-master.conf <user>@<master-ip>:/etc/keepalived/keepalived.conf
$ scp target/configs/keepalived-backup.conf <user>@<backup-ip>:/etc/keepalived/keepalived.conf

# 分发监测脚本
$ scp target/scripts/check-apiserver.sh <user>@<master-ip>:/etc/keepalived/
$ scp target/scripts/check-apiserver.sh <user>@<backup-ip>:/etc/keepalived/
  • 启动keepalived
# 分别在master和backup上启动服务
$ systemctl enable keepalived && service keepalived start

# 检查状态
$ service keepalived status

# 查看日志
$ journalctl -f -u keepalived

# 查看虚拟ip
$ ip a

2.部署第一个主节点

# 准备配置文件
$ scp target/configs/kubeadm-config.yaml <user>@<node-ip>:~
# ssh到第一个主节点,执行kubeadm初始化系统(注意保存最后打印的加入集群的命令)
$ kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs

# copy kubectl配置(上一步会有提示)
$ mkdir -p ~/.kube
$ cp -i /etc/kubernetes/admin.conf ~/.kube/config

# 测试一下kubectl
$ kubectl get pods --all-namespaces

# **备份init打印的join命令**

3.部署网络插件 - calico

# 创建目录(在配置了kubectl的节点上执行)
$ mkdir -p /etc/kubernetes/addons

# 上传calico配置到配置好kubectl的节点(一个节点即可)
$ scp target/addons/calico* <user>@<node-ip>:/etc/kubernetes/addons/

# 部署calico
$ kubectl apply -f /etc/kubernetes/addons/calico-rbac-kdd.yaml
$ kubectl apply -f /etc/kubernetes/addons/calico.yaml

# 查看状态
$ kubectl get pods -n kube-system

最新版本查看官方部署方式,有些变化

4.加入其它master节点

# 使用之前保存的join命令加入集群
$ kubeadm join ...

# 耐心等待一会,并观察日志
$ journalctl -f

# 查看集群状态
# 1.查看节点
$ kubectl get nodes
# 2.查看pods
$ kubectl get pods --all-namespaces

5.加入worker节点

# 使用之前保存的join命令加入集群
$ kubeadm join ...

# 耐心等待一会,并观察日志
$ journalctl -f

# 查看节点
$ kubectl get nodes

发表评论 取消回复
表情 图片 链接 代码

  1. 打桩木
    打桩木 Lv 1

    好详细 我看了20分站读完 说声谢谢

分享