玩转阿里云上Kubernetes 1.7.2 高可用部署

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 随着Kubernetes社区的不断壮大,其版本不断更迭,新功能及BugFIX也不断更新,促使其部署方式也不断的变化,本文将带您在阿里云上快速的部署一个高可用的Kubernetes集群。并且添加阿里云CloudProvider支持,让您可以方便的自由的使用阿里云上的SLB,NAS,阿里云盘,VPC网络等云资源。

随着Kubernetes社区的不断壮大,其版本不断更迭,新功能及BugFIX也不断更新,促使其部署方式也不断的变化,本文将带您在阿里云上快速的部署一个高可用的Kubernetes集群。并且添加阿里云CloudProvider支持,让您可以方便的自由的使用阿里云上的SLB,NAS,阿里云盘,VPC网络等云资源。

部署结构图

image

如上图,脚本通过执行SSH命令的方式部署一个M + N节点的Kubernetes集群,M=Number(Master) N=Number(Worker)。

  • 支持VPC网络,确保Pod使用的网段不等于宿主机网段。
  • 确保ECS可以访问公网,需要下载安装包及docker镜像。上图示例使用阿里云NAT网关产品作为所有ECS访问公网的代理;也可以为每个ECS绑定弹性公网IP解决公网连通问题。
  • 通常为了实现高可用需要部署最少3个master,每个master上面部署一个etcd组件组成一个etcd集群作为kubernetes元数据存储集群。
  • 每个master节点上部署一个apiserver、scheduler、controller-manager、kubelet等组件,配置使用阿里云SLB作为apiserver的负载均衡入口,worker节点组件通过该SLB访问apiserver. master节点组件通过本地接口IP访问本地apiserver。

下面示例了3个master节点+2个worker节点部署结构。

前置条件

  • 准备3个4核8G(至少大于等于2核4G)的机器作为master,假设IP分别为[192.168.0.1,192.168.0.2,192.168.0.3]
  • 准备2个4核8G(至少大于等于2核4G)的机器作为Worker节点。假设IP分别为[192.168.0.168,192.168.0.169]
  • 请事先打通所有节点之间的SSH通道,并且能够实现公钥登录,避免安装过程中频繁输入密码。
  • 选择任意一台机器作为总控机,未来的所有命令都会在这台总控机上执行,假设选定[192.168.0.1]
  • 高可用部署依赖于阿里云SLB为kubernetes apiserver提供负载均衡能力,因此您需要先手动创建一个阿里云SLB,类型为intranet,监听端口6443,后端端口也是6443,后端server backend为您的3个master节点。假设该SLB的地址为192.168.0.98。
  • 在Kubernetes集群上使用阿里云资源需要您提供阿里云账号的AccessKey和AccessSecret,您可以在账号信息中找到。

步骤

假设我们已经选定192.168.0.1作为总控机执行所有命令,首先登录到总控机上。ssh root@192.168.0.1

步骤一:在所有master节点上部署一套ETCD集群

下载部署脚本:

root@192.168.0.1 # curl https://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/pkg/run/1.0/kuberun.sh  > kuberun.sh 
root@192.168.0.1 # chmod +x kuberun.sh

一键部署ETCD集群:

root@192.168.0.1 # ./kuberun.sh --role deploy-etcd \
    --hosts 192.168.0.1,192.168.0.2,192.168.0.3 \
    --version v3.0.17

上面--hosts参数指定etcd组件将要在哪几个机器上部署, --version指定etcd的版本号,目前支持v3.0.17。命令执行完成后一个高可用ETCD集群就部署完成了,peer证书及客户端证书都存放在/var/lib/etcd/cert下面。
验证:

  • 通过ps -eaf|grep etcd查看进程是否正常启动。
  • 通过命令
root@192.168.0.1 # etcdctl --endpoints=https://192.168.0.1:2379 \
        --ca-file=/var/lib/etcd/cert/ca.pem \
        --cert-file=/var/lib/etcd/cert/etcd-client.pem \
        --key-file=/var/lib/etcd/cert/etcd-client-key.pem \
        cluster-health

注:

  1. 任何时候您部署etcd集群出错后可以通过命令./kuberun.sh --role destroy-etcd --hosts 192.168.0.1,192.168.0.2,192.168.0.3 --version v3.0.17来清理etcd部署环境。

步骤二:在所有master节点上部署Kubernetes Master组件

这些Master组件包含 kubelet,kube-proxy,kubectl,kube-apiserver,kube-controllermanage,kube-scheduler

一键部署master节点
使用上一步下载的kuberun.sh脚本

root@192.168.0.1 # export APISERVER_SLB=192.168.0.98 \
        KEY=abc.efg \
        KEY_SECRET=mntjklouwbkddlam \
        HOSTS=192.168.0.1,192.168.0.2,192.168.0.3 \
        ETCD_HOSTS=192.168.0.1,192.168.0.2,192.168.0.3
        
root@192.168.0.1 # kuberun.sh --role deploy-masters \
        --container-cidr 172.16.0.0 \
        --hosts ${HOSTS} \
        --etcd-hosts ${ETCD_HOSTS} \
        --apiserver-lb ${APISERVER_SLB} \
        --extra-sans 3.3.3.3 \
        --docker-version 17.06.1.ce \
        --key ${KEY} \
        --key-secret ${KEY_SECRET}

参数解析:

  • --role 执行的命令类型,取值 deploy-master deploy-node destroy-node
  • --container-cidr ,表示集群的POD的网络CIDR,与宿主机网段不重合即可。
  • --hosts, 表示将在哪些机器上面安装Master组件。
  • --etcd-hosts,表示上一步中etcd集群部署的位置。
  • --apiserver-lb, 对于APIServer前面有LB的情况需要指定该LB的IP地址,方便讲该IP添加到受信任列表。
  • --extra-sans , 用于添加额外的集群受信任IP列表。
  • --docker-version, 指定安装的docker版本。

注:

  1. 如果本地不存在安装包,则会自动从阿里云官网上下载安装包。
  2. 任何时候部署出错,可以通过命令 ./kuberun.sh --role destroy-nodes --hosts 192.168.142.188,192.168.0.1,192.168.0.2,192.168.0.3清理整个环境后重新开始
  3. Master被设置了不调度普通应用,因此您还需要为集群添加node节点来运行常规应用负载.

该命令执行完成后,一个包含master节点的集群就运行起来了.可以通过命令kubectl get no ; kubectl get po -n kube-system 来查看集群应用于节点信息了。

现在可以开始加入Node节点了。

步骤三: 为集群添加节点

添加Worker节点的脚本和部署Master的脚本是同一个。同样在总控机192.168.0.1上执行,假设您要添加的节点IP为192.168.0.168,192.168.0.169,请运行如下命令将两个节点添加到集群中。
为了能够安全的将节点添加到集群中,你需要在添加节点是携带一个token,并且指明apiserver endpoint的地址。
token可以通过命令 kubeadm token list获得,假设为TOKEN=d79fd6.b754322ebab94533
apiserver endpoint为您上面创建的阿里云SLB地址ENDPOINT=192.168.0.98

root@192.168.0.1 # export TOKEN=d79fd6.b754322ebab94533 \
        APISERVER_LB=192.168.0.98 \
        HOSTS=192.168.0.168,192.168.0.169
root@192.168.0.1 # kuberun.sh --role deploy-nodes \
        --hosts ${HOSTS} \
        --apiserver-lb ${APISERVER_LB} \
        --token ${TOKEN} \
        --endpoint ${APISERVER_LB}:6443

参数解析:

  • --role 执行的命令类型,取值 destroy-nodes
  • --hosts, 表示将在哪些机器上面安装Node组件,即node节点IP列表。
  • --apiserver-lb, 对于APIServer前面有LB的情况需要指定该LB的IP地址,方便将该IP添加到受信任列表。同时,node节点通过该apiserver-lb与apiserver通信。
  • --token 用于对加入的节点进行身份认证的信息。通过在master上执行kubeadm token list获得。
  • --endpoint,指定节点bootstrap时的master的IP及端口,通常使用apiserver-lb的值。

验证
通过kubectl get no命令可以显示出刚添加的节点。

访问Kubernetes集群

按照以上方法成功部署一个kubernetes集群后,可以参照阿里云容器服务文档连接到该集群

小结

阿里云提供了非常简单高效的方式让您可以快速的在阿里云上搭建一个高可用的Kubernetes集群,让您从负载的集群部署工作中解放出来,更加专注于上层应用开发。同时,集成了阿里云CloudProvider,可以让您直接通过应用部署描述文件使用诸如阿里云SLB、NAS、阿里云盘等云上资源。
阿里云容器服务将以上过程模板化,让您甚至可以不用输入以上命令即可通过ROS模板一键部署Kubernetes集群。欢迎您试用ROS模板一键创建
阿里云容器服务团队致力于在阿里云上推广容器技术。想了解更多容器服务内容,请访问https://www.aliyun.com/product/containerservice

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
21天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
31 0
|
29天前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
22天前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
33 7
|
1月前
|
弹性计算 运维 安全
2024年阿里云一键搭建部署幻兽帕鲁服务器解决方案
幻兽帕鲁火了,为了确保畅快体验游戏,构建高效、稳定的游戏服务器至关重要。幸运的是,阿里云为您提供了快速、简便的服务器搭建解决方案,即使您对技术知识了解有限,也能在短短一分钟内轻松完成《幻兽帕鲁》游戏的联机服务器搭建!
1450 4
|
1天前
|
Java 应用服务中间件 Linux
在阿里云服务器上部署Tomcat详细图文详解
本文介绍了在阿里云服务器上安装和配置JDK和Tomcat的步骤。首先,需要注册阿里云账号并进行实名认证,然后购买并设置服务器。接着,通过File Zilla连接服务器,创建Java和Tomcat的安装目录,并将JDK和Tomcat的tar.gz文件上传到服务器,解压并重命名。之后,配置JDK的环境变量,将catalina.sh复制到/etc/init.d/目录下,并修改相关配置。最后,启动Tomcat并配置安全组规则,确保可以通过公网访问。
|
2天前
|
弹性计算 JavaScript Java
阿里云服务器搭建部署宝塔详细流程
以下是内容的摘要: 本文主要介绍了在阿里云上创建和配置服务器环境的步骤,包括注册阿里云账号、实名认证、购买和设置服务器、域名的获取与备案、以及使用宝塔面板安装和配置环境。首先,用户需要注册阿里云账号并进行实名认证,选择合适的服务器配置。接着,购买服务器后,要准备并备案域名,以便通过友好的网址访问网站。在服务器上安装宝塔面板,可以方便地管理和配置LAMP/LNMP/Tomcat/Node.js等应用环境。完成这些步骤后,用户还需要在宝塔面板中安装MySQL、Redis等数据库,部署Java或Vue项目,并配置相关端口。最后,将前端项目打包上传至服务器,并设置站点,即可实现网站的上线。
|
2天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。
|
4天前
|
NoSQL 关系型数据库 MySQL
阿里云服务器部署项目流程
本文主要讲解阿里云服务器的部署,如何选择配置等
|
7天前
|
Java 应用服务中间件 Linux
阿里云服务器部署多个tomcat
阿里云服务器部署多个tomcat
|
5天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
38 17

相关产品

  • 容器服务Kubernetes版