1.1. 公有云中的Kubernetes
截止2019年2月,大多数公有云已经提供了容器Kubernetes的产品服务,对于使用公有云的用户来说,最佳实践是直接购买公有云产品,而非自己部署Kubernetes集群,主要是因为公有云已经将网络和存储与Kubernetes集成好了,解决了生产应用的难题。
1.1.1. 阿里云中的Kubernetes
国内阿里云提供了容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
阿里云Kubernetes模式
容器服务Kubernetes版包含了经典Dedicated Kubernetes以及Serverless两种形态,方便您按需选择。
经典Dedicated Kubernetes模式:您可以对集群基础设施和容器应用进行更细粒度的控制,比如选择宿主机实例规格和操作系统,指定Kubernetes 版本、自定义 Kubernetes 特性开关设置等。阿里云 Kubernetes 服务负责为集群创建底层云资源,升级等自动化运维操作。而您需要规划、维护、升级服务器集群,手动或自动在集群中添加或删除服务器。
Serverless 模式:您无需创建底层虚拟化资源,可以利用 Kubernetes 命令指明应用容器镜像、CPU 和内存要求以及对外服务方式,直接启动。
阿里云Kubernetes产品架构
阿里云Kubernetes创建
默认情况下可以在阿里云中自行创建5个集群,每个集群最多可以添加 40 个节点。如需更高配额,需要提交工单申请。
阿里云将网络、存储、安全等方面已经进行了深度集成,在创建Kubernetes集群时,阿里云容器服务提供两种网络插件:Terway和Flannel:
Flannel:使用的是简单稳定的社区的Flannel CNI插件,配合阿里云的VPC的高速网络,能给集群高性能和稳定的容器网络体验,但功能偏简单,支持的特性少,例如:不支持基于Kubernetes标准的Network Policy。
Terway:是阿里云容器服务自研的网络插件,功能上完全兼容Flannel,支持将阿里云的弹性网卡分配给容器,支持基于Kubernetes标准的NetworkPolicy来定义容器间的访问策略,支持对单个容器做带宽的限流。对于不需要使用Network Policy的用户,可以选择Flannel,其他情况建议选择Terway。了解更多Terway网络插件的相关内容,请参见Terway网络插件。
最终阿里云会使用kubeadm帮你创建一个指定版本的Kubernetes集群。
1.1.2. 私有云中的Kubernetes
内网部署Kubernetes
很多企业需要内网部署Kubernetes但是内网又无法访问外网,就需要本地化部署,无忘了本地话部署主要包括两个方面,一个是软件仓库的准备,一个是Kubernetes镜像的准备。
- 准备内网YUM仓库(略)
- 准备Docker Registry(请参考Harbor章节)
- 下载并提交镜像到Harbor中,然后将Harbor的镜像部署直接COPY到生产环境中
下载脚本如下,请根据需求自行修改:
[root@linux-node1 ~]# vim k8s-images.sh
#!/bin/bash
# EVN
ALIYUN_REG="registry.aliyuncs.com/google_containers"
FLANNEL_REG="quay-mirror.qiniu.com/coreos"
LOCAL_REG="192.168.56.11/kubernetes"
K8S_VER=v1.15.5
PAUSE_VER=3.1
ETCD_VER=3.3.10
COREDNS_VER=1.3.1
FLANNEL_VER=v0.11.0-amd64
# Kubernetes Docker Images
IMAGES=(
kube-proxy:${K8S_VER}
kube-scheduler:${K8S_VER}
kube-controller-manager:${K8S_VER}
kube-apiserver:${K8S_VER}
pause:${PAUSE_VER}
etcd-amd64:${ETCD_VER}
coredns:${COREDNS_VER}
)
for IMAGE in ${IMAGES[@]}
do
docker pull ${ALIYUN_REG}/${IMAGE}
docker tag ${ALIYUN_REG}/${IMAGE} ${LOCAL_REG}/${IMAGE}
#docker push ${LOCAL_REG}/${IMAGES}
done
# Flannel
docker pull ${FLANNEL_REG}/flannel:${FLANNEL_VER}
docker tag ${FLANNEL_REG}/flannel:${FLANNEL_VER} ${LOCAL_REG}/flannel:${FLANNEL_VER}