使用 Amazon Elastic Kubernetes Service (EKS) 的方式 (2/3)
Amazon EKS 是什么?

Kubernetesは、コンテナーオーケストレーションツールとして広く使用されており、アプリケーションのデプロイやスケーリング、管理を簡素化することができます。しかし、Kubernetes自体を管理することは、一定の技術力が必要であり、リソースの調整やアップグレードなど、運用には多くの作業が必要となります。
EKSでは、KubernetesのコントロールプレーンをAWSが管理し、ユーザーはワーカーノードを自分で作成、管理します。そのため、Kubernetesに慣れていない人でも、AWSが提供するマネージドサービスとして簡単に利用することができます。また、EKSはAWSの機能であるAuto Scaling、Elastic Load Balancing、Identity and Access Management (IAM)、Virtual Private Cloud (VPC) などと連携し、セキュアな環境でのKubernetesクラスターを構築することができます。
EKSの主な利点
◇AWSのマネージドサービスなので、Kubernetesのコントロールプレーンを自分で管理する必要がない。
◇Kubernetesに必要なリソース(VPC、ELB、Auto Scalingなど)が自動的に作成されるので、簡単にクラスターを構築できる。
◇AWSのセキュリティ機能と統合されているので、セキュアなKubernetesクラスターを構築できる。
◇AWSの機能(CloudWatch、CloudTrail、X-Rayなど)と統合されているので、アプリケーションの監視やトラブルシューティングが容易になる。
在Kubernetes中,与应用程序运行相关的资源可以分为工作负载、服务、配置和存储。
以下是需要解释的内容:
1. 工作负载
2. 服务
3. 配置
4. 存储
5. 网络
6. 资源的创建、确认和删除
7. Pod的创建
1. 工作负荷
Kubernetesのワークロードとは、アプリケーションを実行するためのオブジェクトで、Pod、ReplicaSet、Deployment、StatefulSet、DaemonSetなどが含まれます。これらのオブジェクトは、コンテナを実行するために必要なリソースを定義します。
描述包括在工作负载中的主要对象。
◇Pod
一个Pod可以容纳多个容器。
Pod是在Kubernetes中运行应用程序的最小单元,它可以包含一个或多个容器。Pod可以将在同一节点上共存的多个容器一起部署。此外,它也可以作为管理多个Pod的ReplicaSet或Deployment的单元。
◇ReplicaSet
ReplicaSetは、複数のPodのレプリカ数を管理するためのオブジェクトで、必要なレプリカ数を指定することで、Podの数を自動的に調整することができます。Podをスケールする。ReplicaSetは、Podをまとめて管理するための仕組みであり、Podの起動や停止などを自動的に行うために使用されます。
部署
是按顺序部署还是一次性全部部署?
部署是用于管理多个Pod的对象,提供了进行Pod的滚动更新和回滚等操作的机制。部署包装了ReplicaSet,并通过指定ReplicaSet来自动管理Pod的数量。
◇StatefulSet
StatefulSetは、状態を持つアプリケーションをデプロイするためのオブジェクトで、一連のPodに一意の識別子を付与し、永続的なネットワークIDを提供します。StatefulSetは、Podの順序付けや、永続ボリュームのマウントなどを行うことができます。
◇DaemonSet
DaemonSetは、各ノード上に1つのPodをデプロイするためのオブジェクトで、各ノードで常に実行されるアプリケーションを管理するために使用されます。DaemonSetは、ログ収集エージェント、ノード監視エージェントなど、ノードレベルで必要なサービスを実行するために使用されます。
2.サービス
Kubernetesのサービスは、一連のPodに対して一意なDNS名とIPアドレスを提供するオブジェクトで、一般的には外部からのアクセスを可能にします。Serviceは、Podが動的に作成・削除される環境でも、一貫したアクセス先を提供することができます。Serviceのタイプには、ClusterIP、NodePort、LoadBalancer、ExternalNameがあります。
◇ClusterIP
ClusterIP是一种Service类型,它提供在Kubernetes集群中仅可访问的虚拟IP地址。这种类型的Service会隐藏在Pod的IP地址后面,并被用于访问后端Pod。此类型的Service非常适合用于Kubernetes内部的通信。
◇NodePort
NodePort是一种用于提供可以从Kubernetes集群外访问的Service的Service类型。这种类型的Service可以通过分配给集群中每个节点的端口进行访问。这种类型的Service通常用于开发/测试环境的调试或演示目的。
◇LoadBalancer
LoadBalancerは、外部リソースを介してクラスタ外からアクセス可能なServiceを提供するために使用されるServiceタイプです。このタイプのServiceは、クラウドプロバイダによって提供される負荷分散器を介してトラフィックをバックエンドPodにルーティングします。このタイプのServiceは、本番環境で使用されます。
◇ExternalName
ExternalNameは、Kubernetesクラスタ内のServiceを外部のDNS名にマップするために使用されるServiceタイプです。このタイプのServiceは、外部のサービスにアクセスするために使用されます。例えば、RDSのエンドポイントをDNS名にマップするために使用されます。
3.設定
Kubernetesの設定は、アプリケーションの設定情報を格納するオブジェクトで、ConfigMap、Secretが含まれます。ConfigMapは、アプリケーションの設定情報をKey-Valueの形式で格納するオブジェクトで、Secretは、機密情報を暗号化して格納するオブジェクトです。
◇ConfigMap
ConfigMapは、Kubernetesクラスタ内のアプリケーションの設定情報を格納するためのオブジェクトです。ConfigMapは、Key-Valueの形式で設定情報を格納します。アプリケーションは、ConfigMapを参照して、設定情報を取得することができます。ConfigMapは、コンテナイメージにビルドする前に設定情報を変更することができるため、開発環境と本番環境の設定情報を分離することができます。また、ConfigMapを使用することで、設定情報の変更をKubernetes上で一元的に管理できるため、設定の変更がアプリケーションに反映されるまでの時間を短縮することができます。
◇Secret
Secretは、機密情報(例:パスワード、認証トークンなど)を暗号化して格納するためのオブジェクトです。Secretは、ConfigMapと同じようにKey-Valueの形式で機密情報を格納します。アプリケーションは、Secretを参照して、機密情報を取得することができます。Secretは、ConfigMapと同様に、コンテナイメージにビルドする前に機密情報を変更することができます。また、Secretを使用することで、機密情報を暗号化してKubernetes上で安全に管理することができます。
4. 存储
Kubernetes的存储是用于容器持久化的对象。存储提供了持久化的空间,用于保存数据。存储由两个对象组成:永久卷(Persistent Volume,简称PV)和永久卷申请(Persistent Volume Claim,简称PVC)。此外,通过使用StorageClass对象,可以简化动态永久卷的创建过程。
◇持久卷
持久卷(PV)是提供永久存储抽象化的对象。PV表示与节点物理连接的存储资源。PV提供与存储提供商提供的存储资源(如本地磁盘、网络存储、云存储等)相关的访问策略和存储容量等功能。PV在整个集群中共享,并由PVC使用。
◇PersistentVolumeClaim
PersistentVolumeClaim(PVC)は、永続化ストレージの要求を定義するオブジェクトです。PVCは、アプリケーションが必要とするストレージ容量やアクセス方法などの要件を定義します。PVCは、アプリケーションにとって必要なストレージリソースを割り当てるために、PVとマッピングされます。
◇StorageClass
StorageClassは、動的にPVを作成するためのクラスを定義するオブジェクトです。StorageClassは、ストレージプロバイダによって提供されるストレージクラスを定義し、PVCからの要求に基づいてPVを動的に作成します。StorageClassを使用することで、アプリケーション開発者は、ストレージの作成と削除を自動化することができます。
これらのオブジェクトを使用することで、Kubernetes上でアプリケーションの永続化ストレージを管理することができます。PVは、ストレージリソースの抽象化を提供し、PVCはアプリケーションが必要とするストレージの要件を定義します。また、StorageClassを使用することで、動的にPVを作成し、ストレージの管理を自動化することができます。
5.网络
「クラスタネットワーク」と「外部ネットワーク」があります。Kubernetes内は「クラスタネットワーク」と呼ばれる「外部ネットワーク」とは異なるネットワークが構築されるので、単純に「クラスタネットワーク」内のPodへアクセスすることはできません。
Kubernetesのクラスタ内では、各ノードに割り当てられたIPアドレスに基づいて、クラスタネットワークが構築されます。このネットワークは、各ノード上で実行されるPod間の通信に使用されます。一方、外部ネットワークは、Kubernetesクラスタの外部にあるネットワークで、一般的にはインターネットを指します。
クラスタネットワークは、クラスタ内のPod間の通信に最適化されていますが、外部からのアクセスは制限されています。これは、クラスタネットワークには、クラスタ内のノードやPodにのみ割り当てられるプライベートIPアドレスが使用されるためです。外部からのアクセスを可能にするには、Kubernetesのサービスを使用して、クラスタネットワーク上のPodに公開する必要があります。
6. 创建、确认和删除资源
Kubernetesでは、マニフェストファイルを使用してリソースを作成します。
マニフェストファイルは、YAML形式またはJSON形式で記述され、Kubernetesオブジェクトの設定情報を含みます。
Deploymentオブジェクトを作成するためのYAML形式のマニフェストファイルの例
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 3
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- name: example-container
image: nginx:latest
ports:
- containerPort: 80
在这个清单文件中,我们创建了一个Deployment对象,并指定使用nginx:latest镜像来创建三个副本的Pod。
リソース作成
マニフェストファイルを使用して、kubectlコマンドを使用してリソースを作成することができます。上記のマニフェストファイルを使用してDeploymentオブジェクトを作成するためのkubectlコマンドの例です。
kubectl apply -f example-deployment.yaml
このコマンドは、example-deployment.yamlファイルで指定されたDeploymentオブジェクトを作成します。
要确认已创建的资源,请使用kubectl命令。
下面是用于确认已创建的Deployment对象的kubectl命令示例。
kubectl get deployments
这个命令将显示创建的Deployment对象的列表。
删除资源
要删除已创建的资源,请使用kubectl命令。
以下是使用kubectl命令删除已创建的Deployment对象的示例。
kubectl delete deployment example-deployment
这个命令将删除一个名为example-deployment的Deployment对象。
7. 创建Pod
以下是创建主机文件夹并创建挂载该文件夹的Pod的步骤。
在主机上创建文件夹
例如,如果要创建一个名为/home/user/testdata的文件夹,
可以在终端里执行以下命令。
mkdir /home/user/testdata
Podマニフェストファイルを作成する
Podマニフェストファイルを作成し、ホストのフォルダをマウントするように指定します。
testdataという名前のフォルダを/mnt/testdataというパスにマウントするPodマニフェストファイルの例です。
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: nginx:latest
volumeMounts:
- name: testdata
mountPath: /mnt/testdata
volumes:
- name: testdata
hostPath:
path: /home/user/testdata
type: Directory
在这个清单文件中,我们使用nginx:latest镜像来创建Pod,并指定将名为testdata的文件夹挂载到/mnt/testdata。
通过使用kubectl命令,创建资源并生成Pod。
以下是使用以上清单文件创建Pod的kubectl命令示例。
kubectl apply -f example-pod.yaml
这条命令将根据example-pod.yaml文件创建一个指定的Pod。
您可以这样做,在主机上创建一个文件夹,并创建一个将该文件夹挂载为Pod的文件夹。
亚马逊弹性Kubernetes服务(EKS)的使用方法(1/3)
https://qiita.com/kimuni-i/items/656ca4d314a8982e70cb
亚马逊弹性Kubernetes服务(EKS)的使用方法(2/3)
https://qiita.com/kimuni-i/items/06c70de226cf074d8b23
亚马逊弹性Kubernetes服务(EKS)的使用方法(3/3)
https://qiita.com/kimuni-i/items/b2b3d07c2c76c95884a1