博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AWS中国 Kubernetes 搭建指南
阅读量:2048 次
发布时间:2019-04-28

本文共 5787 字,大约阅读时间需要 19 分钟。

文章目录

基于 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网络所需要的负载均衡器)

更多配置请参考

因此我们为刚才创建的公有子网增加上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.pemssh-keygen -f  ~/.ssh/K8sSSH.pem -y > ~/.ssh/K8sSSH.pubchmod 600  ~/.ssh/K8sSSH.pubchmod 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

按照 步骤: 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-1AWS_PROFILE ?= defaultKOPS_STATE_STORE ?= s3://k8s-storageVPCID ?= vpc-0761a396fcb3a9dddMASTER_COUNT ?= 3MASTER_SIZE ?= m4.largeNODE_SIZE ?= c5.largeNODE_COUNT ?= 2SSH_PUBLIC_KEY ?= ~/.ssh/K8sSSH.pubKUBERNETES_VERSION ?= v1.13.10KOPS_VERSION ?= 1.13.0SUBNET_IDS ?= subnet-0efb59b551dd47dc2,subnet-0a4fa7de20bf500ef,subnet-0ba68ae43a6d71da0CUSTOM_CLUSTER_NAME ?= cluster.unisign.k8s.local# 省略....PHONY: create-clustercreate-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

继续按照 步骤 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

可以看到登录已经成功:

dd

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

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

在这里插入图片描述

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

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 hostmake: *** [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: EOFmake: *** [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: EOFmake: *** [validate-cluster] Error 1

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

参考文档

[1].

[2].
[3].

转载地址:http://ncqof.baihongyu.com/

你可能感兴趣的文章
Linux学习(二十三)正则表达式(一)grep/egrep
查看>>
Linux学习(二十六)日常管理(一)w、vmstat、top、sar、nload、iostat、iotop
查看>>
Linux学习(二十五)正则表达式(三)awk
查看>>
js和php写日历
查看>>
shell递归遍历目录的方法
查看>>
https改造过程中的一个坑
查看>>
GitLab 实现代码自动部署(转载自https://segmentfault.com/a/1190000011561808)
查看>>
free命令详解(转载)
查看>>
tcp协议端口解释(转载)
查看>>
三次挥手四次挥手(转载)
查看>>
keepalived
查看>>
php生成excel的另一种简单方法
查看>>
零基础子网划分(转载)
查看>>
子网(转载自百度百科)
查看>>
为你的静态资源使用cdn(转载)
查看>>
合并压缩css和Js的方式( 转载)
查看>>
压缩html,可以在输出之前使用(转载)
查看>>
用户中心和discuz的ucenter共通
查看>>
使用opcache为你的网站加速(转载)
查看>>
git push命令每次都要输入用户名和密码的问题处理
查看>>