Help us understand the problem. What is going on with this article?

Kubernetes入門ハンズオン-WordPressを立ててみよう-

More than 1 year has passed since last update.

Kubernetesハンズオンを私の所属する研究室で行いました。

我ながら入門者にはとっつきやすい資料ができた気がしたので、Qiitaにも軽く解説を交えつつ貼っておこうと思います。

スライド

初心者による初心者のためのKubernetesハンズオン // Speaker Deck

このハンズオンの対象者

  • Kubernetesを始めたばかり or 始めてみたいひと
  • 他の解説記事でkubectl run ...とかやって一通り試したけど、YMLどうやって書くのかわからなくて困っている人たち

このハンズオンでやらないこと

  • Clusterの構築手順
    • スライドの最後の方で軽く触れていますが、minikubeを使うのが個人的にはおすすめです。
    • Install Minikube | Kubernetes ここにインストール手順が書いています。遅めの回線でも10分ちょっとあれば終わると思います。
  • 永続化
    • こちらもスライドの最後の方とサンプルのマニフェストでは触れていますが、詳しくは触れていません

解説

ハンズオンでは別の人が、 k8sを構成する概念については説明してくれていた状態だったので、このQiita記事では主にスライド上に登場する概念を解説します。スライド見ながらわからない概念がでてきたらちょくちょく参照してみてください。

私自身も初心者なので、誤りがあればコメント等で知らせていただけると幸いです。

namespace

namespaceという名前の通り、名前空間を切るためのリソース。(k8sでは、「リソース」を組み合わせてアプリケーションを構築していく)

他にも、namespaceごとに権限を付与したり、ということもできる。

Deployment/ReplicaSet

Deploymentは自体はReplicaSetを持っているだけのリソースである。

ReplicaSetはPod(あとで解説するがとりあえずDockerのコンテナだと思っておけばいい)のレプリカ(複製)の数を管理するリソースで3とか指定しておくと、常にPodの数を3つに保ってくれる。(Nodeの電源喪失やその他の原因でPodが死んだときには自動でReplicaSetで指定した数にPodがなるようにしてくれる)

では、なぜReplicaSetを持っているだけのDeploymentというリソースが存在するのかというと、世代管理を行う為である。

バージョンアップなどで新しいReplicaSetに変更したときに、Deploymentは徐々に古いPodの数を減らして、新しいPodを配備するということを行ってくれる。(ローリングアップデート)

この恩恵にあずかるために、基本的にはDeploymentを作成することがほとんどのようです。

Pod

Podはk8s上の最小単位。中には1つ以上のDockerコンテナを持っている。

Pod内ではネットワークが共有されるので複数のコンテナで同じポートを使ったりということはできない。

今回の例だとWordPressは本体のコンテナ+MySQLのコンテナを使うことでWordPressを立てる事ができるが、それらを一つのPodに押し込むのはアンチパターン。あくまでもPodは同時に起動していないといけないコンテナを束ねることに留めるのがよい。(というかそうでないとk8sの旨味を味わえない)

Service

Podを束ねるロードバランサー。

今回の例だとこんなマニフェストを書いた。

apiVersion: v1
kind: Service
metadata:
  name: wordpress
spec:
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: wordpress
    role: web

この例でいくとこのServiceに対するアクセスをappラベルの値がwordpressかつroleラベルの値がwebであるPodへ分散してフォワードするというような役割を担っている。

そして、もう一つServiceには大事な役割があって、これを作成するとClusterIPというものがServiceに対して割り当てられる(ClusterIPはクラスタ内からアクセスすることができる仮想的なIPアドレス)のに加えてk8sクラスタ内で稼働しているDNSにService名が登録される。

この仕組みを使うことで他のPodからのアクセスを実現することができる 。今回で言えば、WordPress本体とMySQLの通信にあたる。

Ingress

最初聞いた時、ポケGoの祖先かと思った。

これは、HTTP層のロードバランサー。今回のハンズオンでは、特定のホストで立てたWordPressを公開する目的に使っている。

これは、HTTPを抽象化した概念で、実際の実装はClusterによって異なる。例えば、GKE(Google Kubernetes Engine)だとMaglevというのが実際には使われている。これはすごく高性能なロードバランサーらしい。(使ったことないので知らないけど)

HTTP層なので今回のように、Hostを見てアクセス先を変えるということが可能になるので、これを使ってWordPressを外部公開したというわけ。


いちおうこんな感じ。また何かあったら加筆するかも。

mogamin3
fringe81
Fringeは、最新のテクノロジーとプロフェッショナルによるサービスにより、社会課題に仮説を立てて市場に広げていくことで、数十年という長期的なスパンで価値を生み出し続け、より良い世界を創る集団です。 既存の領域に限らず、時流を読み、仮説を生み出し、テクノロジーの力で優れたサービスを生み出し続けます。
https://www.fringe81.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした