Upgrade to Pro — share decks privately, control downloads, hide ads and more …

初めてのKubernetes (ハンズオン)

初めてのKubernetes (ハンズオン)

More Decks by NearMeの技術発表資料です

Other Decks in Programming

Transcript

  1. 3 KubernetesによるWebサービスのホスティング ワーカーノード1 設定ファイル ロードバランサ Pod Pod Pod Pod Pod

    Pod Pod Service ワーカーノード2 Pod Container Container コントロールプレーン ワーカーノードを管理 Container Registry イメージをダウンロード だいぶ省略して書いてます
  2. 5 kubectlを利用してみよう brew install kubectl # For mac kubectl version

    --client kubectl 他のOS: https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/install-kubectl.html kubectlのインストール kubectl cluster-info --context kind-kind kubectl config use-context kind-kind コンテキストをkindのクラスタに設定 kubectl get node ノードの取得 → kindのデフォルトはワーカーノードとコントロールプレーンまとめて 1台で動作
  3. 6 Deploymentを利用して、Podをスケールさせよう apiVersion: apps/v1 kind: Deployment metadata: labels: app: web-nginx

    name: web-nginx spec: replicas: 3 selector: matchLabels : app: web-nginx template: metadata: labels: app: web-nginx spec: containers: - image: nginx name: nginx ports: - containerPort : 80 web-nginx.yaml Podの定義 3つにスケール kubectl apply -f web-nginx.yaml web-nginx.yamlマニフェストの適用 kubectl get pod Podが3つにスケールしていることを確認
  4. 7 7 DeploymentのPodを削除してみよう kubectl get pod Podの一覧を取得 kubectl delete pod

    web-nginx-694c7647c-7d9rk 一つのPodを削除 kubectl get pod Podの一覧を取得 → しばらくすると新たな Podが構築される ※Deploymentで管理されたPodなので再構築される。  Pod単体で構築した場合は再構築されない。
  5. 8 8 Podの数を変更してみよう apiVersion: apps/v1 kind: Deployment metadata: labels: app:

    web-nginx name: web-nginx spec: replicas: 2 selector: matchLabels : app: web-nginx template: metadata: labels: app: web-nginx spec: containers: - image: nginx name: nginx ports: - containerPort : 80 web-nginx.yaml 2つに変更 kubectl apply -f web-nginx.yaml 変更したweb-nginx.yamlマニフェストの適用 kubectl get pod Podが2つになっていることを確認 また3つに戻してみよう
  6. 10 10 ノードを増やしてみよう 1/3 kind delete cluster kind create cluster

    --config=my-cluster.yaml クラスタを再構築して、 Ingress用のcluster設定を適用 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker kubeadmConfigPatches: - | kind: JoinConfiguration nodeRegistration: kubeletExtraArgs: node-labels: "my-label=true" my-cluster.yaml (kindのIngress用のcluster設定) kubectl get node ワーカーノードが2つ、コントロールプレーンのノードが 1つあることを確認 ラベルをつける ことができる my-label=true
  7. 11 11 ノードを増やしてみよう 2/3 kubectl apply -f web-nginx.yaml web-nginx.yamlマニフェストの適用 kubectl

    get pod -o wide 2つのノードにPodが展開されていることを確認 my-label=true
  8. 12 12 特定のノードでPodを動かしてみよう apiVersion: apps/v1 kind: Deployment … spec: containers:

    - image: nginx name: nginx ports: - containerPort: 80 nodeSelector: my-label: "true" web-nginx.yaml my-label=true kubectl apply -f web-nginx.yaml web-nginx.yamlマニフェストの適用 kubectl get pod -o wide 2特定のラベルがついたノードにのみ Podが配置されていることを確認 特定ラベルがついたノードを選択 (Affinityを用いてもっと細かい制御が可能 )
  9. 13 13 特定のPodのログを見てみよう kubectl get pod Podの一覧を取得 kubectl logs web-nginx-f5bb6cbf5-b299w

    一つのPodのログを取得 ※1つのPod内に複数のContainerがある場合は、Container名も指定する
  10. 14 14 特定のPodにログインしてみよう kubectl get pod Podの一覧を取得 kubectl exec -it

    web-nginx-694c7647c-kj7kr /bin/bash 一つのPodにログイン ※1つのPod内に複数のContainerがある場合は、Container名も指定する
  11. 16 16 namespaceを利用してみよう kubectl get namespace namespaceの一覧を取得 kubectl create namespace

    sandbox namespaceを作成 kubectl apply -f web-nginx.yaml -n sandbox web-nginx.yamlマニフェストをnamespaceを指定して適用 kubectl get pod 指定なしだとnamespaceは”default”なのでpodは表示されない kubectl get pod -n sandbox namespaceを指定するとpodが表示される kubectl delete -f web-nginx.yaml -n sandbox namespaceを指定してリソースを削除
  12. 17 Serviceを利用して”Webサービス”にアクセス # 先のDeploymentの定義に追記 --- apiVersion: v1 kind: Service metadata:

    name: web-nginx spec: selector: app: web-nginx ports: - port: 8080 targetPort: 80 web-nginx.yaml kubectl apply -f web-nginx.yaml web-nginx.yamlマニフェストを適用 kubectl get svc Serviceの確認 kubectl port-forward svc/web-nginx 8888:8080 Serviceをポートフォワードして外出しする curl localhost:8888 “Webサービス”のレスポンスを確認 ※3つのPod内のどれかにアクセスしている “- - -”は区切りで必要
  13. 18 Ingressを利用して”Webサービス”をホスティング 1/2 kind delete cluster kind create cluster --config=my-cluster.yaml

    クラスタを再構築して、 Ingress用のcluster設定を適用 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane kubeadmConfigPatches : - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: node-labels: "ingress-ready=true" extraPortMappings : - containerPort: 80 hostPort: 80 protocol: TCP my-cluster.yaml (kindのIngress用のcluster設定) kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress -nginx/main/deploy/static/provider/kind/deploy.yaml nginx-ingress-controllerの構築
  14. 19 Ingressを利用して”Webサービス”をホスティング 1/2 # 先のServiceの定義に追記 --- apiVersion: networking.k8s.io/v1 kind: Ingress

    metadata: name: example-ingress spec: rules: - host: a.example.com http: paths: - pathType: Prefix path: "/" backend: service: name: web-nginx port: number: 8080 web-nginx.yaml kubectl apply -f web-nginx.yaml web-nginx.yamlマニフェストを適用 # /etc/hostsに以下を追記 127.0.0.1 a.example.com /etc/hostsの編集 curl http://a.example.com/ a.example.comにアクセス