Kubernetes v1.9.7安装部署-基础环境

1、什么是Kubernetes?

Kubernetes(K8S)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。使用Kubernetes可以:

  • 自动化容器的部署和复制
  • 随时扩展或收缩容器规模
  • 将容器组织成组,并且提供容器间的负载均衡
  • 很容易地升级应用程序容器的新版本
  • 提供容器弹性,如果容器失效就替换它,等。

Kubernetes项目地址:https://github.com/kubernetes/kubernetes

说明:本文参考自以下文章、https://image.qikqiak.com/post/manual-install-high-available-kubernetes-cluster/#init-env

下面我将通过以下的内容讲述如何通过二进制的方式安装Kubernetes(v1.9.7)集群、Kube-Apiserver的高可用、Traefik ingress的部署;在Kubernetes集群上安装Docker的私有仓库Harbor,容器化Kubernetes部分组件等内容。部署完成后,你将理解系统各组件的交互原理,进而能快速解决实际问题,所以本文档主要适合于那些有一定kubernetes基础,想通过一步步部署的方式来学习和了解系统配置、运行原理的人。

本系列系文档适用于 CentOS 7、Ubuntu 16.04 及以上版本系统,由于启用了 TLS 双向认证、RBAC 授权等严格的安全机制,建议从头开始部署,否则可能会认证、授权等失败!

2、组件版本

Kubernetes v1.9.7(项目地址:https://github.com/kubernetes/kubernetes/blob/v1.9.7/CHANGELOG-1.9.md)

Docker v18.03.0.ce-1.el7.centos(项目地址:https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1)

Etcd v3.3.4(项目地址:https://github.com/coreos/etcd/releases)

Flanneld v0.10.0(项目地址:https://github.com/coreos/flannel/releases)

TLS 认证通信(所有组件,如etcd、kubernetes master 和node)

RBAC 授权

Kubelet TLS Bootstrapping

Kubedns v1.9.7(项目地址:https://github.com/kubernetes/kubernetes/tree/v1.9.7/cluster/addons/dns)

Dashboard v1.8.3(项目地址:https://github.com/kubernetes/dashboard)

Heapster v1.5.2(项目地址:https://github.com/kubernetes/heapster/releases)

Harbor v1.5.0(项目地址:https://github.com/vmware/harbor/tree/v1.5.0)

3、集群环境介绍

img

备注:考虑到ETCD节点的选举机制需要奇数个节点、这里我们建立在实际生产环境中部署3个或者奇数ETCD节点。

img

4、操作系统基础环境

4.1、关闭操作系统防火墙和Selinux

systemctl stop
firewalld.service
systemctl disable firewalld.service
firewall-cmd –state
sed -i ‘/^SELINUX=.*/c SELINUX=disabled’ /etc/
selinux/config
sed -i ‘s/^SELINUXTYPE=.*/SELINUXTYPE=disabled/g’ /etc/selinux/config
grep –color=auto ‘^SELINUX’ /etc/selinux/config
setenforce 0

4.2、集群环境变量

# TLS Bootstrapping 使用的Token,可以使用命令 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成 BOOTSTRAP_TOKEN=”8981b594122ebed7596f1d3b69c78223″

# 建议使用未用的网段来定义服务网段和Pod 网段
# 服务网段(Service CIDR),部署前路由不可达,部署后集群内部使用IP:Port可达
SERVICE_**CIDR**=”10.254.0.0/16″

# Pod 网段(Cluster CIDR),部署前路由不可达,部署后路由可达(flanneld 保证)
CLUSTER_**CIDR**=”172.30.0.0/16″

# 服务端口范围(NodePort Range)
NODE_PORT_RANGE=”30000-32766″

# etcd集群服务地址列表 ETCD_ENDPOINTS=”https://172.16.200.12:2379,https://172.16.200.13:2379,https://172.16.200.14:2379″

# flanneld 网络配置前缀
FLANNEL_ETCD_PREFIX=”/kubernetes/network”

# kubernetes 服务IP(预先分配,一般为SERVICE_CIDR中的第一个IP)
CLUSTER_KUBERNETES_SVC_IP=”10.254.0.1″

# 集群 DNS 服务IP(从SERVICE_CIDR 中预先分配)
CLUSTER_D**NS_SVC_IP**=”10.254.0.2″

# 集群 DNS 域名
CLUSTER_D**NS_DOMAIN**=”cluster.local.”

# MASTER API Server 地址
MASTER_URL=”k8s-api.virtual.local”

将上面临时环境变量保存为:env.sh,然后将脚本拷贝到所有节点的/usr/k8s/bin目录(如果没有该目录、使用mkdir -p /usr/k8s/bin新建目录、然后通过scp env.sh 172.16.200.* /usr/k8s/bin进行拷贝)。

为方便后面迁移,我们在集群内定义一个域名用于访问apiserver,在每个节点的/etc/hosts文件中添加记录:172.16.200.10 k8s-api.virtual.local k8s-api,其中172.16.200.10为MasterA 的IP,暂时使用该IP来做apiserver 的负载地址。

推荐文章