Kubernetes(5)-K8s集群部署

本文详细介绍了如何使用kubeadm在Ubuntu环境下部署一个包含3个Master和3个Node的Kubernetes集群,包括系统环境准备、关闭防火墙和SELinux、禁用Swap、安装Docker和kubeadm、初始化集群、添加Master和Node节点,以及部署Dashboard的过程。
摘要由CSDN通过智能技术生成

部署环境:

IP 主机名 角色
192.168.100.142 kube-master1,kube-master1.suosuoli.cn K8s 集群主节点 1
192.168.100.144 kube-master2,kube-master2.suosuoli.cn K8s 集群主节点 2
192.168.100.146 kube-master3,kube-master3.suosuoli.cn K8s 集群主节点 3
192.168.100.160 node1,node1.suosuoli.cn K8s 集群工作节点 1
192.168.100.162 node2,node2.suosuoli.cn K8s 集群工作节点 2
192.168.100.164 node3,node3.suosuoli.cn K8s 集群工作节点 3
192.168.100.150 ha1,ha1.suosuoli.cn K8s 主节点访问入口 1(高可用及负载均衡)
192.168.100.152 ha2,ha2.suosuoli.cn K8s 主节点访问入口 1(高可用及负载均衡)
192.168.100.154 harbor,harbor.suosuoli.cn 容器镜像仓库
192.168.100.200 VIP

部署方式:
Kubernetes 集群的部署方式有多种,使用批量部署工具如(ansible/saltstack)等
自动化大部分部署任务或者直接手动部署二进制预编译的软件包。还有一种方式是使用
kubeadm 结合 apt-get/yum 安装必要软件安装,以守护进程的方式启动在宿主机上,
本次就使用 kubeadm 来部署 Kubernetes 集群。

kubeadm 部署参考文档

使用 k8s 官方提供的部署工具 kubeadm 自动安装,需要在 master 和 node 节点上
安装 docker 等组件,然后初始化,把管理端的控制服务和 node 上的服务都以 pod
的方式运行。kubeadm 介绍

V1.10 版本 kubeadm 介绍

部署目标:
下图给出本次要部署的目标集群的基本环境。该集群有 3 个主节点和 3 个从节点,
使用 K8s 官方的部署工具kubeadm部署一个主节点,再将其他主节点和工作
节点加入集群。图中省略 kube-master2/3 和 node3:

一. 系统环境及部署前准备

1.1 系统版本及 Kubernetes 组件版本

部署该集群使用的操作系统、容器引擎、etcd 及 Kubernetes 版本信息:

  • OS: Ubuntu 18.04.3 LTS
  • CRI: Docker 19.03.8
  • Kubernetes: 1.17.2
  • kubeadm: v1.17.2

运行试验虚拟机的外部环境:

  • 宿主机系统: Windows 10 Pro 1709
  • VMware workstation: Version 15 Pro
  • VMnet 网段: 192.168.100.0/24
  • VMnet 给虚拟机分配的网关: 192.168.100.2

1.2 主机名解析

在个主机设置集群的 IP 和主机名解析:

~# vim /etc/hosts

192.168.100.142 cube-master1 cube-master1.suosuoli.cn
192.168.100.144 cube-master2 cube-master2.suosuoli.cn
192.168.100.146 cube-master3 cube-master3.suosuoli.cn

192.168.100.160 node1 node1.suosuoli.cn
192.168.100.162 node2 node2.suosuoli.cn
192.168.100.164 node3 node3.suosuoli.cn

192.168.100.150 ha1 ha1.suosuoli.cn
192.168.100.152 ha2 ha2.suosuoli.cn
192.168.100.154 harbor harbor.suosuoli.cn

在 VMware 的宿主机,也就是自己的物理主机 windows 上添加 hosts 解析:

192.168.100.142 kube-master1 kube-master1.suosuoli.cn
192.168.100.144 kube-master2 kube-master2.suosuoli.cn
192.168.100.146 kube-master3 kube-master3.suosuoli.cn

192.168.100.160 node1 node1.suosuoli.cn
192.168.100.162 node2 node2.suosuoli.cn
192.168.100.164 node3 node3.suosuoli.cn

192.168.100.150 ha1 ha1.suosuoli.cn
192.168.100.152 ha2 ha2.suosuoli.cn
192.168.100.154 harbor harbor.suosuoli.cn

1.3 主机时间同步

在集群的 Master 和各 node 同步时间,也可写入计划任务:

~# ntpdate ntp.aliyun.com

或者

~# crontab -e
...
*/12 * * * * root /bin/bash ntpdate ntp.aliyun.com

1.4 关闭防火墙和 SELinux

Centos 系列关闭 SELinux:

~# setenforce 0
~# sed -i 's#^\(SELINUX=\).*#\1disabled#' /etc/sysconfig/selinux

Ubuntu:

~# systemctl stop firewalld

1.5 禁用 Swap 设备(可选)

~# swapoff -a

二. 部署 Kubernetes 集群

2.1 大致的部署步骤

kubeadm 部署参考

  1. 部署 HAProxy 和 Keepalived 作为 Kubernetes 管理端的访问入口,及实现访问入口高可用。
  2. 在 Master 及各 Node 安装 Docker、kubelet、kubectl 和 kubeadm,以守护进程方式启动 Docker 及 kubelet。
  3. 在其中一台 Master 上使用kubeadm init进程集群初始化。
  4. 在其他的 Master 上使用kubeadm join命令加入集群。
  5. 在各 Node 上使用kubeadm join命令加入初始化完成的集群。
  6. 在集群上部署网络组件,如 flannel 或者 calico 等来提供 service 网络和 pod 网络。

2.2 在各 master 节点安装 kubeadm-kubelet-kubectl-Docker

安装 Docker 参考

2.2.1 在阿里云配置 K8s 镜像源

配置镜像源方式参考

~# apt update && apt-get install -y apt-transport-https
~# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
~# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
~# apt update

2.2.2 安装 kubeadm-kubelet-kubectl

~# apt-cache madison kubeadm  # 先查看一下有哪些可选版本
~# apt install kubeadm=1.17.2-00 kubelet=1.17.2-00 kubectl=1.17.2-00

2.3 在各 node 节点安装 kubelet-kubectl

同样,配置 kubernetes 镜像源

~# apt update && apt-get install -y apt-transport-https
~# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
~# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
~# apt update

安装:

~# apt install kubelet=1.17.2-00 kubectl=1.17.2-00

2.4 Master 节点初始化集群

在三台 master 中任意一台进行集群初始化,而且集群初始化只需要初始化一次,中途
初始化失败,则使用kubeadm reset命令清除数据,然后再初始化。

2.4.1 kubeadm 命令用法

kubeadm init    启动一个 Kubernetes 主节点
kubeadm join    启动一个 Kubernetes 工作节点并且将其加入到集群
kubeadm upgrade 更新一个 Kubernetes 集群到新版本
kubeadm config  管理kubeadm集群的配置,该配置保留在集群的ConfigMap
                # kubeadm config print init-defaults
kubeadm token   使用 kubeadm join 来管理令牌
kubeadm reset   还原之前使用 kubeadm init 或者 kubeadm join 对节点产生的改变
kubeadm version 打印出 kubeadm 版本
kubeadm alpha   预览一组可用的新功能以便从社区搜集反馈

使得kubeadm可以自动补全:
~# apt install bash-completion
~# kubeadm completion bash > /etc/profile.d/kube-completion.sh
~# source /etc/profile.d/kube-completion.sh

kubeadm init [flags]:

[flags]:
--apiserver-advertise-address string
# API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32     默认值:6443
#API 服务器绑定的端口。
--apiserver-cert-extra-sans stringSlice
#用于 API Server 服务证书的可选附加主题备用名称(SAN)。可以是 IP 地址和 DNS 名称。
--cert-dir string     默认值:"/etc/kubernetes/pki"
# 保存和存储证书的路径。
--certificate-key string
# 用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
--config string
# kubeadm 配置文件的路径。
--control-plane-endpoint string
# 为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--cri-socket string
# 要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
--dry-run
# 不要应用任何更改;只是输出将要执行的操作。
-k, --experimental-kustomize string
# 用于存储 kustomize 为静态 pod 清单所提供的补丁的路径。
--feature-gates string
# 一组用来描述各种功能特性的键值(key=value)对。选项是:
IPv6DualStack=true|false (ALPHA - default=false)
-h, --help
# init 操作的帮助命令
--ignore-preflight-errors stringSlice
# 错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--image-repository string     默认值:"k8s.gcr.io"
# 选择用于拉取控制平面镜像的容器仓库
--kubernetes-version string     默认值:"stable-1"
# 为控制平面选择一个特定的 Kubernetes 版本。
--node-name string
# 指定节点的名称。
--pod-network-cidr string
# 指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。
--service-cidr string     默认值:"10.96.0.0/12"
# 为服务的虚拟 IP 地址另外指定 IP 地址段
--service-dns-domain string     默认值:"cluster.local"
# 为服务另外指定域名,例如:"myorg.internal"。
--skip-certificate-key-print
# 不要打印用于加密控制平面证书的密钥。
--skip-phases stringSlice
# 要跳过的阶段列表
--skip-token-print
# 跳过打印 'kubeadm init' 生成的默认引导令牌。
--token string
# 这个令牌用于建立控制平面节点与工作节点间的双向通信。格式为 [a-z0-9]{6}\.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef
--token-ttl duration     默认值:24h0m0s
# 令牌被自动删除之前的持续时间(例如 1 s,2 m,3 h)。如果设置为 '0',则令牌将永不过期
--upload-certs
# 将控制平面证书上传到 kubeadm-certs Secret。

初始化一个 Kubernetes 集群必须的选项:

~# kubeadm init\
--apiserver-advertise-address=192.168.100.142\
--apiserver-bind-port=6443\
--ignore-preflight-errors='swap'\
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers\
--kubernetes-version=v1.17.2\
--pod-network-cidr=10.20.0.0/16\
--service-cidr=172.20.0.0/20\
--service-dns-domain=suosuoli.local

2.4.2 确认 kubeadm 版本

root@kube-master1:~# kubeadm version
kubeadm version: &version.Info{
   Major:"1", Minor:"17", GitVersion:"v1.17.2", GitCommit:"59603c6e503c87169aea6106f57b9f242f64df89", GitTreeState:"clean", BuildDate:"2020-01-18T23:27:49Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"linux/amd64"}

2.4.3 准备镜像

查看安装指定版本 Kubernetes 需要的镜像有哪些:

root@kube-master1:~# kubeadm config images list --kubernetes-version v1.17.2
...
k8s.gcr.io/kube-apiserver:v1.17.2
k8s.gcr.io/kube-controller-manager:v1.17.2
k8s.gcr.io/kube-scheduler:v1.17.2
k8s.gcr.io/kube-proxy:v1.17.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5

2.4.4 在 Master 节点下载所需镜像

为避免在初始化过程中由于到 docker 镜像仓库拉取镜像失败,所以事先将所需的镜像
拉取到本地,之后再进行集群初始化。推荐提前在 master 节点下载镜像以减少安装等
待时间,但是镜像默认使用 Google 的镜像仓库,所以国内无法直接下载,但是可以通
过阿里云的镜像仓库把镜像先提前下载下来,可以避免后期因镜像下载异常而导致 k8s
部署异常。

root@kube-master1:~# vim pull-k8s-images.sh
root@kube-master1:~# cat pull-k8s-images.sh
#!/bin/bash

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.17.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.17.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.17.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.17.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull registry.cn-hangzhou.aliyuncs.com/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值