在亚马逊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环境

整体工作流程

在这篇文章中,整体工作流程如下所示。

    1. 将3个EC2实例启动(1个Master,2个Worker)

 

    1. 在所有节点上安装Docker、kubelet、kubeadm和kubectl

 

    1. 在Master节点上初始化kubeadm并进行Master节点的配置

 

    将Worker节点添加到集群中

0. 关于本文中所构建的环境

kubernetes on aws3.png

以下是使用过的物品。

    • 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节点的附加安全组如下所示。

ポート番号用途アクセス許可元6443/TCPKubernetes APIVPCのCIDR2379,2380/TCPetcd server client APIVPCのCIDR10250/TCPkubelet APIVPCのCIDR10251/TCPkube-schedulerVPCのCIDR10252/TCPkube-controller-managerVPCのCIDR

请按照以下方式设置要连接到Worker节点的安全组。

ポート番号用途アクセス許可元10250/TCPkubelet APIVPCのCIDR30001-30003/TCPNode Port Service自PCのIPアドレス

2. 在亚马逊EC2上部署Kubernetes环境

本章中我们将按照以下大致步骤进行环境设置:
1. 安装所需模块(如Docker和kubelet)
2. 使用kubeadm搭建Master节点
3. 使用kubeadm搭建Worker节点并将其添加到集群中

図4.png

安装 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在美国和其他国家的注册商标或商标。
– 其他列出的公司名称和产品名称是各自公司的商标和注册商标。

广告
将在 10 秒后关闭
bannerAds