在亚马逊EC2上构建Kubernetes环境~新手尝试(1)~
这个系列文章是一位一年级新员工在EC2平台上尝试不同的Kubernetes环境构建,并总结出成功的步骤。
首先
这个系列包括在EC2上构建Kubernetes集群的环境配置部分(本文),
创建Kubernetes集群中的五个资源(如Pod和Service等)的资源创建部分,
最后是将ElasticSearch和Kibana引入Kubernetes集群进行运维监控的运维监视部分。
这篇文章描述了在EC2上建立Kubernetes集群的步骤。
资源创建和运营监控的相关文章如下。
-
- Kubernetes on Amazon EC2 環境構築編 (本記事):EC2上にKubernetesクラスターを構築するまでの手順を書いてます。
Kubernetes on Amazon EC2 リソース作成編(今後公開予定):Kubernetesの5つのリソース(PodやServiceなど)を作成する手順を書いてます。
Kubernetes on Amazon EC2 運用監視編(今後公開予定):Kubernetes環境にElasticSearchとKibanaを導入するまでの手順を書いてます。
由于本文重点关注步骤,因此省略了对Kubernetes术语的详细解释。
章节目录
0. 本文将建立的环境说明
1. 在亚马逊EC2上安装Kubernetes所需的预备工作
2. 在亚马逊EC2上搭建Kubernetes环境
整体工作流程
在这篇文章中,整体工作流程如下所示。
-
- 将3个EC2实例启动(1个Master,2个Worker)
-
- 在所有节点上安装Docker、kubelet、kubeadm和kubectl
-
- 在Master节点上初始化kubeadm并进行Master节点的配置
- 将Worker节点添加到集群中
0. 关于本文中所构建的环境

以下是使用过的物品。
-
- docker-CE 19.03.6-ce
-
- Kubernetes v1.20.1
- Flannel v0.13.0-rc2
在Amazon EC2上搭建Kubernetes所需的预先准备工作。
在准备阶段,需要创建EC2实例和安全组。
在创建EC2之前,需要先创建VPC和公共子网。
本文中所述将创建EC2实例。
在本文中,选择了Amazon Linux 2作为AMI。
请选择t2.medium或更高性能的实例类型。
※由于需要引入Kubernetes,因此需要至少2GB内存和2个CPU。
https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
为了使Master节点和Worker节点的端口不同,需要创建两个安全组。
请设置用于Master节点的附加安全组如下所示。
请按照以下方式设置要连接到Worker节点的安全组。
2. 在亚马逊EC2上部署Kubernetes环境
本章中我们将按照以下大致步骤进行环境设置:
1. 安装所需模块(如Docker和kubelet)
2. 使用kubeadm搭建Master节点
3. 使用kubeadm搭建Worker节点并将其添加到集群中

安装 Docker(适用于所有节点的 Docker 安装)
首先,将Docker安装在所有节点上。
(1) 更新默认已经安装的软件包。
$ sudo yum update -y
使用amazon-linux-extras命令安装Docker。
$ sudo amazon-linux-extras install -y docker
(3) 安装完成后,启动Docker并重新启动EC2实例,以便自动设置Docker启动。
$ sudo systemctl start docker && sudo systemctl enable docker
2-2. (所有节点) 安装kubelet、kubeadm和kubectl。
建立库以安装所需的模块来构建 Kubernetes 环境。
(1)创建库以安装 kubelet、kubeadm 和 kubectl。
$ sudo vi /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
安装kubelet、kubeadm、kubectl。
$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
如果SELinux处于活动状态,请先禁用SELinux,然后输入上述命令。
$ setenforce 0
(3) 我们将启动Kubelet,并将其配置为在EC2实例重新启动后自动启动。
$ sudo systemctl enable kubelet && sudo systemctl start kubelet
2-3. (主节点)kubeadm
请初始化kubeadm,并进行Master节点的配置。
请仅在Master节点上执行此步骤。
(1)初始化kubeadm。
在执行结果的最后,会显示以下类似的文本,将”kubeadm join ~”一句复制并保存起来。
(稍后,添加Worker节点到集群时会用到。)
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
(省略)
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join MaserノードのプライベートIPアドレス:6443 --token トークン番号 --discovery-token-ca-cert-hash sha256:XXXXXXXXXX
为了让非root用户可以执行kubectl命令,执行以下命令。
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
(3) 进行 flannel 部署。
※ flannel 是 Kubernetes 集群构建网络模型的一个插件之一。
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
请确认STATUS已经变为Ready。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 5m v1.20.1
在(Worker节点)集群中添加一个Worker节点。
使用kubeadm将Worker节点添加到Kubernetes集群中。
请在要添加到集群的每个Worker节点上执行此步骤。
(1)复制并粘贴之前在kubeadm初始化(1)中保存的”kubeadm join ~”的命令,并以root权限执行。
$ sudo kubeadm join MasterノードのプライベートIPアドレス:6443 --token トークン番号 --discovery-token-ca-cert-hash sha256:XXXXXXXXXX
(2) 确认工作节点已被添加到集群中。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 14m v1.20.1
worker1 Ready <none> 11m v1.20.1
worker2 Ready <none> 11m v1.20.1
这样,Kubernetes集群的建立就完成了。
接下来,我们将在建立的Kubernetes集群上创建pod和service。
关于在亚马逊EC2上创建Kubernetes资源的部分将在未来公开发布。
作者的话
为什么在EC2上建立Kubernetes环境呢?因为在新人培训后,学习了AWS和容器技术等内容,我的前辈给了我建议,说“如果在AWS上建立Kubernetes环境,就能同时学习AWS和Kubernetes”。所以我就试着去做了。
在当时我对AWS和Kubernetes一无所知的情况下,我不知道如何创建EC2实例和构建集群,感到非常困惑。
其中特别让我苦恼的是EC2安全组的设置。
我不知道在安全组中需要设置哪些端口,这让我十分困扰。
※商標类:
– Amazon Web Services,”Powered by Amazon Web Services”徽标,[以及其他AWS商标在美国和其他国家是Amazon.com,Inc.或其相关公司的商标。
– Docker和Docker徽标是Docker Inc.在美国和其他国家的注册商标或商标。
– Kubernetes和Kubernetes徽标是The Linux Foundation在美国和其他国家的注册商标或商标。
– 其他列出的公司名称和产品名称是各自公司的商标和注册商标。