+86 13541016684Mon. - Fri. 10:00-22:00

使用 Amazon Ec2 + aws-k8s-cni 构建 K8s集群

使用 Amazon Ec2 + aws-k8s-cni 构建 K8s集群

使用 Amazon Ec2 + aws-k8s-cni 构建 K8s集群

在AWS上构建Kubernetes(K8S)时,通常使用EKS。
EKS 价格昂贵(每月约 10,000 日元),因此用于验证目的。
在 Amazon Linx2 上构建 K8S。

前提

・您必须拥有 AWS 账户。

注意

由于使用此过程卸载“ec2-net-utils”的影响
重启实例时将不再分配公网IP。
此过程是在公共子网中构建的,用于验证目的,但是
实际上,请将其构建在私有子网中。

准备工作 各资源名称

K8S集群名称:dev-k8s-cluster
K8S 主 EC2:dev-k8s-master
K8S 节点 EC2:dev-k8s-node

创建 EC2 所需的资源

使用 AWS 控制台来完成您的工作。
①创建IAM角色

ecb975c9-a4ed-4f63-b9f1-e727b29e9ec7

② 选择可信实体。
实体类型:AWS 服务
使用案例:EC2

2d04076a-9cfe-4d83-8d20-f6f58f820ff2

③ 选择要使用的角色。
使用的角色:AmazonEC2ContainerRegistryReadOnly

473fa8f8-b42f-4378-9d03-f50928d4aa48

④创建角色。
角色名称:dev-k8s-role

eb2ca7c2-1a8d-4596-b61b-11b1e1cbb120

⑤创建安全组

⑥创建安全组。
安全组名称:dev-k8s-security
描述:k8s EC2安全组
专有网络:默认专有网络
*此处无需设置任何带内规则。

e1a883a9-23e7-4fe3-bb45-570ca1561717

创建完成后记下安全组ID。

⑦编辑带内规则。
SSH:我的IP
所有流量: ⑥中记录的安全组ID

4d64f6aa-5311-4337-b9fe-fb3705958b92

创建K8S主EC2

使用 AWS 控制台来完成您的工作。
① 从 EC2 菜单启动实例。

11a94f1d-246d-45f3-afa1-3be76f623ff7

②设置标签。
键:名称,值:dev-k8s-master
Key: kubernetes.io/cluster/dev-k8s-cluster *请替换为您自己的集群名称。 ,价值:拥有
键:k8s-control-plane,值:*可以省略。

66e70b31-1e74-4ac8-ac55-a0e4d0272865

③ 为 AMI 设置 Amazon Linux。

e16f652c-0080-4c1b-b8c7-3b84632b31e7

④设置实例类型。
实例类型:t3.small
*如果是t3.small,只要启动K8S就会耗尽内存。
如果您需要更多空间,请增加实例类型。

692ab087-c212-498b-8bab-c13adb86a9e3

⑤创建密钥对。
密钥对名称:dev-k8s-key

4be885cd-c07e-4c2c-893d-c21ff858db8d

⑥ 设置网络。
选择您在准备过程中创建的现有安全组。
安全组名称:dev-k8s-security

a4a6277a-b94e-4664-b921-135be631b593

⑦设置存储。
根体积:20G

e3f8e6f6-a65d-49b3-b474-393b140e53a8

⑧设置高级详细信息。
在 IAM 实例配置文件中设置准备时创建的角色。
角色名称:dev-k8s-role

6bfc196f-7ede-46ce-94c8-e5e2fb4edce0

⑨启动EC2。

在主EC2上安装K8S

使用teraterm等工具通过SSH登录K8S主EC2并执行工作。

① 确认K8S master EC2的公网IP
从 AWS 控制台的 EC2 列表中检查“dev-k8s-master”的详细信息。

4f047d23-c426-49d0-b68f-f01b72e5b78a

②使用teraterm登录K8S master EC2。
IP:①中确认的公网IP
用户名:ec2-user
密钥文件:上面创建的“dev-k8s-key”

1ef94718-a431-43d3-9dba-5015a63d1eaa

③将EC2更新到最新状态。

④卸载ec2-net-utils。
如果安装下面描述的 aws-k8s-cni 插件时包含 ec2-net-utils,
卸载它,因为行为变得不稳定。

⑤ 安装容器运行时。
运行时使用containerd。

配置containerd自动启动。

检查状态。

d80b0bf7-710a-43de-99f7-942788c23bc1

⑥设置操作系统参数。

⑦设置containerd的config.toml。

创建默认设置。

更改 config.toml 中的参数。

变更详情

反映设置。

⑧添加tc模块,因为安装kubeadm时会出现警告。

⑨安装kubeadm、kubelet、kubectl。
添加 K8S 存储库。

文件内容: /etc/yum.repos.d/kubernetes.repo

安装。
*这次我们将安装1.23版本。

配置 kubelet 自动启动。

检查状态。
这里K8S的建设还没有完成,所以处于停止状态。

c0950ab9-95e5-4142-92e0-17aa64e6a164-1

⑩ 使用kubeadm安装K8S。

创建K8S的配置文件。

文件内容:config.yaml

使用 kubeadm 命令安装 K8S。

94939f60-ff3f-43e6-8a35-9451eddb6135

请注意安装完成后出现的命令。 *上图红框部分

添加K8S节点时会用到这个,所以一定要记下来。

⑪设置kubectl命令。

配置将 kubectl 命令与 ec2-user 结合使用的设置。

使用 kubectl 命令检查 pot 的状态。

d96fdd73-b7fe-48e7-bf84-d67fd6e947f3

*Coredns 正在等待处理,但这不是问题,因为网络插件尚未安装。

安装K8S网络插件

① 在AWS控制台中为EC2角色添加权限。
角色名称:dev-k8s-role

19687fd6-e688-4db8-b049-fdfbbf2033df-1

②在内联策略中输入json。
下面列出了所需的 iam。
fluidiconamazon-vpc-cni-k8s/iam-policy.md at master · aws/amazon-vpc-cni-k8s

③创建内嵌策略。
内联策略名称:dev-amazon-vpc-cni-k8s

3e455777-c3b8-440d-bf38-bfb478029996

④ 从 git 获取 amazon-vpc-cni-k8s yaml 文件。
安装 git 命令。

这次我们得到的版本是1.11.3

编辑配置文件。

更改图像源和运行时间。

⑤在K8S上安装。

使用 kubectl 命令检查 pod 的状态。

d154c87e-14b9-4f0e-a82d-f12175e5aa4e

*当 coredns 变为 Running 时,安装完成。

创建K8S节点EC2。

使用 AWS 控制台来完成您的工作。

① 从 EC2 菜单启动实例。

②设置标签。
键:名称,值:dev-k8s-node
Key: kubernetes.io/cluster/dev-k8s-cluster *请替换为您自己的集群名称。 ,价值:拥有

6b4e4b75-4a64-4818-8bee-267a2cd4fcc9

③ 为 AMI 设置 Amazon Linux。

04041e99-cdb7-408c-9f16-48d61e20be66

④设置实例类型和密钥对。
实例类型:t3.small
密钥对名称:dev-k8s-key

cbb314dd-33b8-4d4e-9a76-57a0bc7764cb

⑥ 设置网络。
选择您在准备过程中创建的现有安全组。
安全组名称:dev-k8s-security

bf4a99ef-c46c-4e46-a748-c90a2b2b2fde

⑦设置存储和角色。
根卷:8G *保留默认值。
角色名称:dev-k8s-role

e7cd518f-17ac-409c-b856-f2c58fc03a57

⑧创建EC2。

在节点 EC2 上安装 K8S

使用teraterm等工具登录K8S master EC2并执行工作。

①K8S master EC2全局IP确认
从 AWS 控制台的 EC2 列表中检查“dev-k8s-node”的详细信息。

8212f136-4e27-4a05-b086-ab7174c0eb38

②使用teraterm登录K8S master EC2。
IP:①中确认的全球IP
用户名:ec2-user
密钥文件:上面创建的“dev-k8s-key”

e365df68-53e7-4a51-a6f0-08c8ebb16a76

③EC2を最新の状態にアップデートします。

④卸载ec2-net-utils。
如果安装下面描述的 aws-k8s-cni 插件时包含 ec2-net-utils,
卸载它,因为行为变得不稳定。

⑤ 安装容器运行时。
运行时使用containerd。

配置containerd自动启动。

检查状态。

4ab1c3e9-2655-44d7-b18a-279468c4871e

⑥设置操作系统参数。

⑦设置containerd的config.toml。

创建默认设置。

更改 config.toml 中的参数。

文件内容:config.yaml

反映设置。

⑧添加tc模块,因为安装kubeadm时会出现警告。

⑨安装kubeadm、kubelet、kubectl。

添加 K8S 存储库。

文件内容:/etc/yum.repos.d/kubernetes.repo

安装。

*这次我们将安装1.23版本。

配置 kubelet 自动启动。

检查状态。
这里K8S的建设还没有完成,所以处于停止状态。

084c4a9d-2676-430f-822c-2284c54ebada

⑩ 使用kubeadm链接K8S主EC2。

使用在主 EC2 上安装 K8S 时显示的命令。

使用 sudo 运行它并添加选项“–cri-socket=/run/containerd/containerd.sock”。

8af8104a-3d43-48b9-bc2b-b837b8b91eb7

检查K8S主EC2上的状态。

通过SSH登录K8S主EC2,使用kubectl命令查看节点状态。

67a50a72-0ab5-4012-a2e5-2947ede67aa3

如果 STATUS 为“Ready”,则表示正常。

部署示例 nginx。

①创建nginx yaml文件。

文件内容:nginx.yaml

②部署nginx。

③ 检查nginx的部署情况。

bca4c487-bac6-4ae7-9536-aaf9b6ec5679

如果 STATUS 为“Runnin”,则表示正常。

④ 检查服务的节点端口。

5372f6b4-2781-42f8-ac43-e61fc80eea5d

检查 PORT 中是否显示“80:30366”。
节点端口将为“30366”。

⑤ 更改安全组,使其可以从外部访问。
登录 AWS 控制台并完成您的工作。

目标安全组:dev-k8s-security

将以下内容添加到您的带内规则中:
类型:自定义 TCP
端口范围:30366 *这是上面确认的节点端口。
来源:我的 IP *这用作我的 IP 以进行验证。 如果您想公开,可以输入“0.0.0.0/0”等。

e94a25c7-4944-401d-bd1d-3aa6955f61a6

⑥ 使用浏览器访问nginx。
URL:http://K8S节点EC2公网IP:30366 *这是上面确认的节点端口。

d2989489-e22c-4b29-8422-12c5b075348b

如果显示nginx页面则正常。