0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SadServers学習メモ #8(1)】使ったコマンドまとめ(kubernetes)

Posted at

初めに

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のライフサイクル

  1. マシンを用意し、nodeを作成する
  2. 作成したnodeを集め、clusterを作成する
  3. manifest.yamlを作成し、Pod、Deployemnt、Serviceなどの定義を記述する
  4. kubernetesの起動 / 定義

manifest.yamlの読み方

今回の問題で出てきたmanifest.yamlを読み解きながら理解していきましょう。
このファイルでは、大きく分けて2つ定義がされています。

  • Deployment
  • Service
manifest.yaml
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の基礎知識を学びました。
次回は実際に問題を解いていきましょう!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?