Closed34

Kubernetes for the Absolute Beginners - Hands-on メモ

Kaito SugimotoKaito Sugimoto
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
Kaito SugimotoKaito Sugimoto

Nodeを取得

$ kubectl get nodes
NAME       STATUS   ROLES                  AGE     VERSION
minikube   Ready    control-plane,master   3m11s   v1.23.3
Kaito SugimotoKaito Sugimoto

Minikubeを起動し、クラスターを作成する

minikube start

k8s deploymentを作成する

kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10

deploymentをserviceとして公開する

kubectl expose deployment hello-minikube --type=NodePort --port=8080

公開されたserviceのurlを取得する

minikube service hello-minikube --url

↑ここで何も表示されない

後処理

kubectl delete service hello-minikube
kubectl delete deployment hello-minikube

https://hackersheet.com/naopoyo/sheets/ryfmggz

Kaito SugimotoKaito Sugimoto

Pod のデプロイ

kubectl run nginx --image=nginx

docker hub の nginx イメージを使って、nginx という名前の pod をデプロイする

pod 一覧

kubectl get pods

pod 一覧(pod のプライベートアドレスも取得)

kubectl get pods -o wide

pod の詳細

kubectl describe pod nginx
Kaito SugimotoKaito Sugimoto
kubectl create -f replicaset-definition.yml
kubectl get replicaset
kubectl delete replicaset myapp-replicaset
kubectl replace -f replicaset-definition.yml
kubectl scale--replicas=6 -f replicaset-definition.yml
Kaito SugimotoKaito Sugimoto

ReplicaSet がすること

  • ReplicaSet が作成した Pod を削除すると、すぐに別の Pod を作成する
  • ReplicaSet が作成した Pod と同じ Pod を作ると、それを削除する
Kaito SugimotoKaito Sugimoto
kubectl edit replicaset myapp-replicaset

これにより一時ファイルが作成される(元のファイルは変わらない!!)
これを編集して、たとえば replicas: 3 の部分を 4 に変えたりすると、その通り Pod が増える

Kaito SugimotoKaito Sugimoto

https://kubernetes.io/ja/docs/concepts/workloads/controllers/replicaset/

apiVersion: apps/v1 # 左は api、右は apps
kind: ReplicaSet # CamelCase
metadata:
  name: frontend
  labels: # ここでは app=mywebiste と tier=frontend というラベルを持つ
    app: mywebsite
    tier: frontend
spec:
  replicas: 4
  template: # Pod の中身から apiVersion と kind を取ったもの
    metadata:
      name: myapp-pod
      labels:
        app: myapp
    spec:
      containers:
        - name: nginx
          image: nginx
  selector:
    matchLabels: # app: myapp というラベルをもとに select する
      app: myapp
Kaito SugimotoKaito Sugimoto

deployment に関するコマンドのまとめ

# create
kubectl create -f deployment-definition.yml

# get 
kubectl get deployments

# update
kubectl apply -f deployment-definition.yml
kubectl set image deployment/myapp-deployment nginx=nginx:1.9.1

# status
kubectl rollout status deployment/myapp-deployment
kubectl rollout history deployment/myapp-deployment

# rollback
kubectl rollout undo deployment/myapp-deployment
Kaito SugimotoKaito Sugimoto

rollout

$ kubectl rollout status deployment.apps/myapp-deployment
Waiting for deployment "myapp-deployment" rollout to finish: 0 of 3 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 1 of 3 updated replicas are available...
Waiting for deployment "myapp-deployment" rollout to finish: 2 of 3 updated replicas are available...
deployment "myapp-deployment" successfully rolled out
Kaito SugimotoKaito Sugimoto

Networking

  • IPアドレスはそれぞれの Pod に割り当てられる
  • Pod と Pod が通信する時... NAT を使わずに通信できる必要がある
    • 何らかのベンダーソフトで Pod の IP を管理する
Kaito SugimotoKaito Sugimoto

Services

NodePort

  • TargetPort (Webアプリケーションのポート番号)
  • Port
  • NodePort (外からアクセスする時のポート番号)
minikube service [service name] --url

で Service の URL 確認できる

ClusterIP

frontend, backend, redis... 等のIPをそれぞれまとめる

LoadBalancer

Kaito SugimotoKaito Sugimoto
  1. Deploy PODs
  2. Create Services: redis 、db それぞれの POD を他の POD からアクセス可能にする
  3. Create NodePort: voting-app 、result-app を外部からアクセス可能にする
Kaito SugimotoKaito Sugimoto

voting app demo

  • podを5つ作成
  • internal service (ClusterIP) を作成
    • postgres と redis に対応
  • exrernal service (nodePort) を作成
    • voting-app と result-app に対応
Kaito SugimotoKaito Sugimoto

Deployment で以下の Pod をそれぞれまとめる

  • voting-app
  • redis
  • postgres
  • working-app
  • result-app

kubectl scale ですぐにスケールアップできる

このスクラップは2022/09/08にクローズされました