初めに
Linuxの学習目的でSadServers
を始めました。
備忘のために使用したコマンドをアウトプットします。
SadServersとは
Linuxの学習サイト。
架空のサーバを題材とし、その管理者となって与えられた依頼をこなしていく。
実際にコマンドを使って作業をすることで、実践的なスキルが身につくことが期待できる。
今回のお題
タイトル
"Bilbao": Basic Kubernetes Problems
詳細
kubernetes上にnginxを立ち上げたがアクセスできない。
作業の流れ
-
manifest.yml
を確認 - 各nodeの状態を確認(スケジューリングされているかなど)
-
manifest.yml
を修正し、再起動
前提知識
私はkubernetesをほとんど知らないため、この記事ではkubernetesの基本知識やmanifest.ymlの読み方などをまとめていこうと思います。
以下の内容は主にChatGPTなどを活用してまとめたものです。誤りが含まれている場合もございますので、あらかじめご了承ください。
kubernetesとは
Kubernetesとは、コンテナのオーケストレーションツールです。
例えば、起動したコンテナが停止した場合でも、自動で再起動する仕組みを持っています。
基本用語一覧
用語 | 意味 |
---|---|
Pod | kubernetesが管理するアプリケーションの最小単位。 一つまたは複数のコンテナを元に作成される。 |
Deployment | Podを管理する役割を持つ。 |
Service | 各Podのアクセス方法を定義する役割を持つ。 |
node | Kubernetesクラスター内でPodを実行する物理マシンや仮想マシン。 |
cluster | 複数のノードの集合体で、クラスター全体を管理する仕組み。 |
kubernetesのライフサイクル
- マシンを用意し、nodeを作成する
- 作成したnodeを集め、clusterを作成する
- manifest.yamlを作成し、Pod、Deployemnt、Serviceなどの定義を記述する
- kubernetesの起動 / 定義
manifest.yaml
の読み方
今回の問題で出てきたmanifest.yaml
を読み解きながら理解していきましょう。
このファイルでは、大きく分けて2つ定義がされています。
- Deployment
- Service
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: localhost:5000/nginx
ports:
- containerPort: 80
resources:
limits:
memory: 2000Mi
cpu: 100m
requests:
cpu: 100m
memory: 2000Mi
nodeSelector:
disk: ssd
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
clusterIP: 10.43.216.196
type: LoadBalancer
Deployment
kind: Deployement
となっている箇所です。
metadata
にはDeployment自体の定義を記述できます。任意のlabelなどを付与できるようです。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec配下には管理するPodの情報を記述できます。
selector
には管理する対象Podの条件を記述します。以下は、app:nginx
のラベルを管理対象とするようです。
template
にはPod自体の定義を書けます。具体的な定義はspec
配下にあります。nginxのコンテナイメージを元にして作成しているようです。nodeSelector
ではどのnodeに接続するかを定義できます。ここでは、disk: ssd
というラベルのnodeに紐づけるようです。
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: localhost:5000/nginx
ports:
- containerPort: 80
resources:
limits:
memory: 2000Mi
cpu: 100m
requests:
cpu: 100m
memory: 2000Mi
nodeSelector:
disk: ssd
Service
Serviceには、各Podへのアクセス情報を定義できます。
Podは再作成されるたびにIPが変わってしまう恐れがあります。ServiceはPodのIPが変わっても安定したアクセスを提供するための仮想的なエンドポイントを作り、内部的にアクセス先のPodにルーティングを行います。
spec
配下のselector
では、どのPodに紐づけるかを定義しています。
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
clusterIP: 10.43.216.196
type: LoadBalancer
終わりに
今回は問題を解くためのkubernetesの基礎知識を学びました。
次回は実際に問題を解いていきましょう!