LoginSignup
1
3

More than 3 years have passed since last update.

【メモ】Kubernetesのよく使うリソースまとめ【初心者】

Last updated at Posted at 2021-04-27

概要

  • PodやらDeploymentやら、k8sのリソースは種類がいっぱいあってよくわからないのでまとめてみる
  • 基本的に以下の書籍の内容をなぞる
  • Docker/Kubernetes 実践コンテナ入門

Node

  • k8sクラスタが最も大きいリソース単位
  • クラスタの管理下にNodeがある
    • AWSでいうEC2のインスタンス
$ kubectl get nodes

でクラスタ内nodeを確認

Namespace

  • クラスタ内ではnamespaceごとに仮想的なクラスタを作成できる。

namespaceの一覧を見るには

$ kubectl get namespace

と打てばいい。
今後出てくるコマンドでnamespaceを指定したい場合は基本的に

-n {namespame}

のオプションをつければどうにかなる。

Pod

  • 1個以上のコンテナの集合体

myPod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-echo
spec:
  containers: 
  - name: nginx
    image: gihyodockernginx
  ports:
    - containerPort: 80
  - name: echo
    image: gihyodocker/echo:latest
  ports:
  - containerPort: 8080

kindでリソースの種類を指定。今回はPod
metadata.nameにPodの名前をつける
spec.containers以下にコンテナとそのイメージを書いていく。
上の場合だとnginxとechoという2つのコンテナを1つのPodとしてまとめている。

Pod関連のコマンド

podを作成する際は

$ kubectl apply -f myPod.yaml

-fオプションの場合はyaml fileを指定、-kの場合はdirectoryを指定。
削除する場合は

$ kubectl delete pod my-echo

ログを表示したい場合は

$ kubectl logs -f my-echo -c echo

-cでコンテナを指定する。
-fはなくても実行できた。

とは打てばよい。
できたPodを確認するには

$ kubectl get pods

とうつ。

$ kubectl describe pod my-echo

でPodの内容を詳細に表示。
PodはどこかのNodeに配置され、1つのPodが複数Nodeにまたがることはない。

ReplicaSet

myReplicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet # リソースの名前
metadata:
  name: echo # ReplicaSetに名前をつける
  labels:
    app: echo 
spec: # 以下Podの設定
  replicas: 3 # いくつPodをつくるか
  selector:
    matchLabels:
      app: echo 
  template: # template以下はPodリソースにおけるspec定義と同じ
    metadata:
      labels:
        app: echo
    spec: # 以下Podを構成するコンテナの設定(さっきと同じ)
      containers:
      - name: nginx 
        image: gihyodocker/nginx:latest 
        env: 
        - name: BACKEND_HOST
          value: localhost:8080
        ports:
        - containerPort: 80 
      - name: echo
        image: gihyodocker/echo:latest
        ports:
        - containerPort: 8080

こんな感じで書く。
envの部分は環境変数を設定してる。
kubecltコマンドを使った作成の仕方はさっきと同様なので割愛。

Deployment

myDeployment.yaml

apiVersion: apps/v1
kind: Deployment # ここの名前が変わってる以外はほぼReplicasetと同じ
metadata:
  name: echo 
  labels:
    app: echo 
spec:
  replicas: 3
  selector:
    matchLabels:
      app: echo 
  template: # template以下はPodリソースにおけるspec定義と同じ
    metadata:
      labels:
        app: echo
    spec:
      containers:
      - name: nginx 
        image: gihyodocker/nginx:latest 
        env: 
        - name: BACKEND_HOST
          value: localhost:8080
        ports:
        - containerPort: 80 
      - name: echo
        image: gihyodocker/echo:patched
        env: 
        - name: HOGE 
          value: fuga 
        ports:
        - containerPort: 8080

こんな感じで書く。
Deploymentは名前の通りデプロイの単位として使われ、ReplicaSetがそのまま使われることはあまりない。
Deploymentはリビジョンを使ってReplicaSetの世代管理を行える。
そのため問題があった場合に一つ前のversionにロールバックしたりとかできる。
Podの数を増やしたり減らしたりとかもよしなにやってくれて便利。

Service

myService.yaml

apiVersion: v1
kind: Service # リソースの名前
metadata:
  name: echo # Serviceの名前
spec:
  selector:
    app: echo # appの名前。これに一致するapp, releaseを指定したPodと疎通できる
    release: summer
  ports:
    - name: http
      port: 80 # 80番ポートを公開

こんな感じで書く。
これでhttp://echo/にHTTPリクエストを通してPodに疎通できる。
厳密にはhttp://echo.{namespace}.svc.localだが、svc.localは省略可能。
namespaceはデフォルトだとdefaultになる。

Ingress

myIngress.yaml

apiVersion: extensions/v1beta1
kind: Ingress # リソースの名前
metadata:
  name: echo # Ingress名前
spec:
  rules:
  - host: ch05.gihyo.local # ここに外部からアクセスできる
    http:
      paths:
      - path: /
        backend:
          serviceName: echo # echoという名前のサービスの80番ポートを公開する
          servicePort: 80

まとめ

  • 本の内容を自分なりにまとめた
1
3
2

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
1
3