文章目录

  • 1. 准备
    • 1.1 网络
    • 1.2 存储桶
    • 1.3 密钥
    • 1.4 堡垒机
  • 2. Kops-cn
    • 2.1 步骤3 修改Makefile
    • 2.2 调整负载均衡器
  • 3. 登录K8s集群中的节点
  • 4. 调整集群中的节点数量
  • n. F&Q
    • 集群没有启动完成就验证
  • 参考文档

基于 kops搭建,搭建前请确定你的I AM账号具有Admin的权限,否则可能在搭建过程中出现权限不足无法创建的问题。

1. 准备

1.1 网络

创建弹性IP用于K8S网络统一的出口


创建VPC

公网用于堡垒机、VPN服务器,私有网络用于部署K8S服务集群


设置一些必要的参数,此处需要注意设置刚才分配得到的NAT IP。


创建完成之后注意要给VPC上打上标签让 Kubernetes能够识别和管理到这些VPC

VPC需要打上的标有

KubernetesCluster 值是集群名称(cluster.unisign.k8s.local
kubernetes.io/cluster/your_cluster_name 注意键中的your_cluster_name要替换为你定义的集群名称, 值是资源拥有的类型(ownershared),这里设置为共享类型shared

更多配置请参考 集群 VPC 注意事项

然后记录下该VPC的ID

  • vpc-0761a396fcb3a9ddd

接下来到 子网页面,创建子网:vpc选择刚才创建的VPC、选择一个子网地址段,注意选择一个可选区。

用相同的方式创建3个这样的子网,注意:每个子网必须要在不同的可用区中(保持高可用)

子网创建完成之后同样的需要为子网都打上标签这样的才能让Kubernetes识别和管理到。除了上面提及的那两个标签之外还需增加两种类型的标签,这两种类型的标签针对于公有子网和私有子网设置。

KubernetesCluster 值是集群名称(cluster.unisign.k8s.local
kubernetes.io/cluster/your_cluster_name 注意键中的your_cluster_name要替换为你定义的集群名称, 值是资源拥有的类型(ownershared),这里设置为共享类型shared
kubernetes.io/role/internal-elb 值为1,表明该子网为私有子网,他将会被专用于私有子网的负载均衡器所注册和使用。
kubernetes.io/role/elb 值为1,表明该子网为公有子网,他将会被专用于公有子网的负载均衡器所注册和使用。(列如Ingress网络所需要的负载均衡器)

更多配置请参考 集群 VPC 注意事项

因此我们为刚才创建的公有子网增加上KubernetesClusterkubernetes.io/cluster/cluster.unisign.k8s.localkubernetes.io/role/elb的标签。


为三个私有子网都增加上KubernetesClusterkubernetes.io/cluster/cluster.unisign.k8s.localkubernetes.io/role/internal-elb的标签。

创建完成后记录下这三个私有子网的ID,在Kops配置中将使用到

  • subnet-0efb59b551dd47dc2
  • subnet-0a4fa7de20bf500ef
  • subnet-0ba68ae43a6d71da0

1.2 存储桶

创建一个S3,这个存储桶用于放置K8s的配置信息。

保持默认设置直接创建就可以

创建完成后记录下该桶的名称(k8s-storage)就可以。

1.3 密钥

创建一个用于登录aws cli的AK、SK

我的安全凭证

创建访问密钥

记录下AK和SK在使用KOPS时需要使用到

创建一个K8S集群登录使用的专用密钥对

到EC2页面 的网络与安全 下的 密钥对

输入密钥对名称,创建密钥对

创建完成后会自动下载密钥对,请妥善保管该pem文件,一会将会用到。

1.4 堡垒机

到EC2下创建一个实例 Amazon Linux 2 AMI (HVM), SSD Volume Type

注意配置一下,分配网络为刚才创建的VPC和公有子网,并且分配公有IP

创建完成之后使用登录到这台堡垒机上,接下来需要上传刚才得到的pem密钥对文件。

K8sSSH.pem移动到/home/ec2-user/.ssh目录下,然后生成公钥

chmod 600 ~/.ssh/K8sSSH.pem
ssh-keygen -f  ~/.ssh/K8sSSH.pem -y > ~/.ssh/K8sSSH.pub
chmod 600  ~/.ssh/K8sSSH.pub
chmod 400 ~/.ssh/K8sSSH.pem

注意:在登录K8s集群中的节点时,还需要将~/.ssh/K8sSSH.pem 权限改为 400,否则会引起权限错误而登录不了的问题。

配置AWS Cli,使用刚才得到的AK和SK,填入集群所在的区域(宁夏就是cn-northwest-1

aws configure

Default output format 保持默认,可设置为json或者 table

到这里准备的操作基本完成

2. Kops-cn

按照 Kops-cn README 步骤: 1、2、3 操作

2.1 步骤3 修改Makefile

  • KOPS_STATE_STORE 此处放置 s3:// + 存储桶的名称。例如:s3://k8s-storage
  • TARGET_REGION 就是部署的区域宁夏就是cn-northwest-1
  • CUSTOM_CLUSTER_NAME 就是集群的名称,格式为 cluster.名字.k8s.local 如果不按照这种格式设置会导致 Route53 host not found 的错误哦

为了将K8s部署到刚才创建的私有网络中,需要调整一些配置,重新编辑Makefile文件。

  1. 设置TARGET_REGION可用区
  2. 设置KOPS_STATE_STORE s3存储
  3. 设置VPCID VPC ID
  4. 设置SSH_PUBLIC_KEY密钥,这个就是刚才生成 ~/.ssh/K8sSSH.pub
  5. 增加变量SUBNET_IDS 用于记录私有子网的ID,这个变量就放刚才得到的三个子网的ID,用“,”隔开。
  6. 增加变量CUSTOM_CLUSTER_NAME用于自定义集群名称。

修改.PHONY: create-cluster,在指令的最后增加上下面几个参数

--utility-subnets=$(SUBNET_IDS) \
--api-loadbalancer-type=internal \
--subnets=$(SUBNET_IDS) \
--topology=private

最终的配置文件如下:

TARGET_REGION ?= cn-northwest-1
AWS_PROFILE ?= default
KOPS_STATE_STORE ?= s3://k8s-storage
VPCID ?= vpc-0761a396fcb3a9ddd
MASTER_COUNT ?= 3
MASTER_SIZE ?= m4.large
NODE_SIZE ?= c5.large
NODE_COUNT ?= 2
SSH_PUBLIC_KEY ?= ~/.ssh/K8sSSH.pub
KUBERNETES_VERSION ?= v1.13.10
KOPS_VERSION ?= 1.13.0
SUBNET_IDS ?= subnet-0efb59b551dd47dc2,subnet-0a4fa7de20bf500ef,subnet-0ba68ae43a6d71da0
CUSTOM_CLUSTER_NAME ?= cluster.unisign.k8s.local# 省略....PHONY: create-cluster
create-cluster:@KOPS_STATE_STORE=$(KOPS_STATE_STORE) \AWS_PROFILE=$(AWS_PROFILE) \AWS_REGION=$(AWS_REGION) \AWS_DEFAULT_REGION=$(AWS_DEFAULT_REGION) \kops create cluster \--cloud=aws \--name=$(CLUSTER_NAME) \--image=$(AMI) \--zones=$(ZONES) \--master-count=$(MASTER_COUNT) \--master-size=$(MASTER_SIZE) \--node-count=$(NODE_COUNT) \--node-size=$(NODE_SIZE)  \--vpc=$(VPCID) \--kubernetes-version=$(KUBERNETES_VERSION_URI) \--networking=amazon-vpc-routed-eni \--ssh-public-key=$(SSH_PUBLIC_KEY) \--utility-subnets=$(SUBNET_IDS) \--api-loadbalancer-type=internal \--subnets=$(SUBNET_IDS) \--topology=private

继续按照Kops-cn README 步骤 4、5、6操作

等待集群配置创建完成

2.2 调整负载均衡器

注意: 使用kops启动的kubernetes的apiserver 是运行在 443端口上,而不是6443

由于中国区 80 和 433 端口的使用是需要备案的,所以此处我们需要调整负载均衡端口到非433,否则验证集群会失败

到EC2页面选择 负载均衡器,找到名字为api-cluster-unisign**的负载均衡器

编辑负载均衡的端口

将 负载均衡器端口由443改为8443

在描述中点击安全组的 组名称

选择 api-elb.cluster.** 然后在编辑入站规则

由 HTTPS改为 自定义TCP的8443端口

接下来回到堡垒机上,编辑kubectl 的配置文件

vi ~/.kube/config

修改啊clusters.cluster.server,在末尾加上:8443

验证集群有效性

make validate-cluster

可以看到集群已经正常运行。

3. 登录K8s集群中的节点

由于K8s集群部署到VPC中的私有网络,没有公网IP,所以我们只能通过在VPC中的公有子网中的服务器间接的连接到K8s集群服务器。

因此我们继续使用上面创建的堡垒机进行操作

从EC2控制台获取到某个K8s集群节点的实例私有子网IP,推荐选择Master节点

使用公钥SSH登录到节点上

ssh -i ~/.ssh/K8sSSH.pem admin@10.0.201.12

如果提示无权限那么请设置私钥使用权限chmod 400 ~/.ssh/K8sSSH.pem

可以看到登录已经成功:

Kops-cn 所使用的镜像是基于debian的,登录的用户不是ec2-user而是admin

4. 调整集群中的节点数量

make edit-ig-nodes

Kops使用Autoscale组的方式来创建集群,所以说这里编辑的是工作节点的弹性伸缩设置。

如果只是调整基础数量基础节点的数量,那么调整 spec.minSize就可以

此处我们将2调整为3,maxSize大于等于minSize,所以也调整maxSize为3。

编辑好之后保存,然后更新集群

make update-cluster

从控制台上可以看到已经有一个实例在启动

过一会之后我们验证集群的有效

make validate-cluster

在初始化完成之后集群正常启动

更多的设置调整设置,比如弹性缩减时保留实例之类的请参考 instance_groups.md

n. F&Q

集群没有启动完成就验证

在修改了负载均衡器和安全组之后使用make validate-cluster出现

unexpected error during validation: error listing nodes: Get https://internal-api-cluster-unisign-k8s-l-1befqc-1231872735.cn-northwest-1.elb.amazonaws.com.cn:8443/api/v1/nodes: dial tcp: lookup internal-api-cluster-unisign-k8s-l-1befqc-1231872735.cn-northwest-1.elb.amazonaws.com.cn on 10.0.0.2:53: no such host
make: *** [validate-cluster] Error 1

或者是

unexpected error during validation: error listing nodes: Get https://internal-api-cluster-unisign-k8s-l-1befqc-1231872735.cn-northwest-1.elb.amazonaws.com.cn:8443/api/v1/nodes: EOF
make: *** [validate-cluster] Error 1

的错误,这是因为控制节点(master)还没有完成启动,所以请耐心等候。

或者是

unexpected error during validation: error listing nodes: Get https://internal-api-cluster-unisign-k8s-l-1befqc-1231872735.cn-northwest-1.elb.amazonaws.com.cn:8443/api/v1/nodes: EOF
make: *** [validate-cluster] Error 1

的错误,这是因为控制节点(master)还没有完成启动,所以请耐心等候。

参考文档

[1]. nwcdlabs . github. https://github.com/nwcdlabs/kops-cn
[2]. kubernetes/kops . github . https://github.com/kubernetes/kops/blob/master/docs/instance_groups.md
[3]. aws . doc . https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/network_reqs.html

AWS中国 Kubernetes 搭建指南相关推荐

  1. Kubernetes权威指南(下)

    Phineas # Kubernetes权威指南<Kubernetes权威指南>第5版勘误:https://github.com/kubeguide/K8sDefinitiveGuide- ...

  2. Kubernetes权威指南第2版 和 Docker技术入门与实战第2版 两本容器的书下载地址

    两本书的下载链接 下载链接 链接:https://pan.baidu.com/s/13gv0ZQRiHfvLwgwjsvUiEA 密码:hi8o Kubernetes权威指南第2版 目录: 第1章 K ...

  3. 【转载】拿来即用的企业级安全运维体系搭建指南

    拿来即用的企业级安全运维体系搭建指南 本文我们将针对如何解决问题来进行详细说明,从问题入手,通过纠正或者培养良好的运维安全习惯,搭建完整的运维安全技术体系. 作者:林伟壕来源:DBAplus社群| 本 ...

  4. Kubernetes入门指南

    Kubernetes 简介 Kubernetes 是谷歌开源的容器集群管理系统,是 Google 多年大规模容器管理技术 Borg 的开源版本,主要功能包括: 基于容器的应用部署.维护和滚动升级 负载 ...

  5. 利用Kubernetes搭建便携式开发环境之MySQL和Redis

    之前给大家介绍过, 我自己用的开发环境都是容器化的,只不过前两年不会用K8,大部分都是用的 Docker 或者 Docker-Compose.随着这一年多对 K8 的学习和工作中的使用,一直有想法用K ...

  6. K8s系列之:DNS服务搭建指南

    K8s系列之:DNS服务搭建指南 一.skydns配置文件说明 二.修改每台Node上的kubelet启动参数 三.创建skydns RC和Service 四.通过DNS查找Service 五.DNS ...

  7. AWS中国(北京)区域正式在中国商用

    [2016年9月7日,北京]在北京举办的AWS技术峰会上,北京光环新网科技股份有限公司("光环新网")携手Amazon Web Services, Inc.(AWS)联合宣布:由光 ...

  8. AWS宣布Amazon EKS在AWS中国(宁夏)区域和AWS中国(北京)区域正式商用

    2020年3月13日,北京,今天,亚马逊旗下公司Amazon Web Services, Inc. (AWS) 宣布,Amazon Elastic Kubernetes Service(Amazon ...

  9. 八百元八核的服务器?二手服务器(工作站)搭建指南(下)

    本文分成两部分,上一部分传送门:<八百元八核的服务器?二手服务器搭建指南> 在上一部分我们已经学习了搭建二手服务器的基础知识,这部分,我们将深入学习各种配件的详细参数.选择适合的配置.学习 ...

最新文章

  1. hsrp热备路由协议实验
  2. 001_Spring Data JPA
  3. web.xml配置详细
  4. php表达式生成工具,thinkPHP5.0数据查询表达式生成技巧
  5. 控制台一直报错, [WDS] Disconnected!
  6. Js中的for in
  7. Acrobat如何修改PDF/A模式下的PDF文档
  8. 2019公需科目快速学完_【1017丨话题】励志!69岁大爷驾校学车走红,“科目二有信心一次过quot;...
  9. linux open dev/tty0 receive_buf,书写基于内核的linux键盘纪录器(p9-0e)(3)
  10. 返回行javascript比较时间大小
  11. python检测屏幕图像_Python超级教程,使用Python进行检测面部特征
  12. 黄光裕出来后,首先会做这三件事(转)
  13. 基于Java开发的Java毕业设计实战项目
  14. 职场中警惕七种危险的同事
  15. 后台事务自动跳转工作流节点
  16. 面向对象基础实战——飞机大战
  17. vue 调用虚拟键盘
  18. 建设容器云平台之前不能忽视3个评估,你的企业能得多少分? | 某银行最佳实践分享
  19. Navicat提示access violation at address in module'navicate.exe'
  20. 28岁自学3年前端成功转行的励志故事

热门文章

  1. sws_kp操作(selenium webdriver+python)
  2. YAPI的安装和使用
  3. 高考还能够改变普通人的命运么?数据分析来告诉你!!
  4. 公众号题库系统接口-网课答案解析接口
  5. IDEA必装插件-Gyro
  6. keras指定gpu_keras-gpu的安装与配置
  7. SSRPanel 后端配置对接教程
  8. android 网络运营商名称显示规则(锁屏界面,下拉列表)
  9. CSDN如何搜索自己的博客;使用Google搜索自己的博客
  10. java调用腾讯地图根据经纬度获取位置信息