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

  • A+
所属分类:Kubernetes

1、什么是Kubernetes

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

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

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

说明:本文参考自以下文章、https://blog.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、集群环境介绍

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

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

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

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_DNS_SVC_IP="10.254.0.2"

# 集群 DNS 域名

CLUSTER_DNS_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 的负载地址。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: