8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

EC2 で kubernetes の基礎

Posted at

コンテナの概要についてはまずこちら👇
AWSにおけるコンテナサービス


#1.kubernetesが動く仕組み#

k8s
Node サーバーのこと。コンテナはこのNODEの上で実行されます。
Cluster Nodeを一纏めにしたグループのこと。1台のNodeが故障しても、他のNodeで処理を実行できます。1台のNodeに処理が集中しないように負荷分散することもできます。
Master Clusterを管理するサーバー。誰がどのグループに所属しているか、Nodeが正常か監視したりする。

#2.kubernetesの構成部品#

Users

🔽 API/CLI/UIで命令

Contorol Plane → マスターノードのこと。

🔽 apiserver/scheduler/controllersといった部品が受け取る。

Nodes

🔽 kubnet という部品で受け取る。

もう少し詳しく、、、

Master
API Server 実行命令を受け取り、Nodeに対して命令をだす。
etcd k8sに関する情報が保管される。
Scheduler コンテナの配置を管理する。
Controller Manger 監視し必要に応じて足りないものを生成してくれる。
Node
ContainerRuntime DockerEnngineなどのコンテナを動かすためのソフトウェア
Kubelet K8sのエージェント ContainerRuntimeと連携してコンテナの起動停止を行う。API Serverと通信して命令を受け取る。

#3.Minikube を動かしてみる#

  • EC2環境
  • ubuntu
  • t3.micro

基本的な設定は、Running Minikube in AWS EC2 (Ubuntu)

kubectl インストール

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

chmod +x ./kubectl

sudo mv ./kubectl /usr/local/bin/kubectl

docker インストール

sudo apt-get update && \
    sudo apt-get install docker.io -y

minikube インストール

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

minikube version

管理者権限にして、minikube をスタート

sudo -i

minikube start --vm-driver=none

が、conntrack がないとかエラーになる。

minikube v1.9.2 on Ubuntu 18.04 ✨ Using the none driver based on user configuration 💣 Sorry, Kubernetes v1.18.0 requires conntrack to be installed in root's path

conntrack をインストールすると、minikube スタートが成功する。

apt-get install conntrack

#4 deployment#

nginxイメージでmy-nginxという名前のdeploymentを作成。

kubectl create deployment --image nginx my-nginx

podが作成されていることがわかる。

kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
my-nginx-9b596c8c4-dcw9x   1/1     Running   0          43h

Pod
1つ以上のコンテナを纏めた単位のこと。
IPアドレスはPod単位で付与されます。
なので宛先をローカルホストとすることで、Pod内のコンテナは通信可能ということです。
また、同じポート番号を共有することはできません。

複数のコンテナを1つの単位に纏めるとどんないいことがあるのか?
例えば、ローカルボリュームとgitを同期させるgit syncのコンテナを入れるだけで簡単に設定変更することなどができる。

もしもPod化しない場合、どのコンテナがどれと紐づくか管理しなければ行けなくなったり、管理が複雑になる。ネットワークを共有しているPodと纏めることで管理が楽になリます。

最初は1podに1コンテナで構成することをおすすめします。

Replica Set
Podを作成したり管理したりするもの。
これは、deploymentによって作成される。
システムを入れ替える場合は、Replica Setとpodが入れ替わることになります。

podの数を増やすには↓

kubectl scale deployment --replicas 2 my-nginx

podが増えていることがわかる。

kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
my-nginx-9b596c8c4-dcw9x   1/1     Running   0          43h
my-nginx-9b596c8c4-gcfrg   1/1     Running   0          43h

次にサービスを作成して、外からアクセスできるようにしてみる。

kubectl expose deployment my-nginx --port=80 --type=LoadBalancer
kubectl get services
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP        3d17h
my-nginx     LoadBalancer   10.106.179.40   <pending>     80:32343/TCP   28s

ここでEC2のセキュリティグループを許可することを忘れないようにしましょう。
スクリーンショット 2020-04-11 14.37.32.png

最後にEC2のパブリックIPアドレス:32343にアクセスして表示されるか確認!

EC2のパブリックIP ➡️ EC2のプライベートIP:32343 → Services 10.106.179.40:80 → pod 172.17.0.4 172.17.0.5

なので、サービスはロートバランサーの役割もしてくれる。

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?