Skip to content

Instantly share code, notes, and snippets.

@masanobuimai
Last active February 4, 2023 21:27
Show Gist options
  • Save masanobuimai/b5aeda37152ca995405bce7f7c5a1bf7 to your computer and use it in GitHub Desktop.
Save masanobuimai/b5aeda37152ca995405bce7f7c5a1bf7 to your computer and use it in GitHub Desktop.
てらだよしおまつり in 仙台 2019

てらだよしおまつり

  • 仮想マシンは作っても作らなくてもいい
  • クライアントに必要なもの
    • docker
    • azure cli
    • jdk
    • kubectl

Azure Container Register(ACR)の作成

Azureポータルから作る場合

https://github.com/yoshioterada/k8s-Azure-Container-Service-AKS--on-Azure/blob/master/CreateAzureContainerRegistry.md

  • リソースの作成>Container Registry

    • Registry名:てきとー
    • Resource Group: new → てきとー
    • Admin user: Enable

    できあがったら Access key で以下の情報を控える

    • ログインサーバー
    • ユーザ名
    • パスワード

Azure Kubernetes Service(AKS)の作成

Azureポータルから作る場合

  • リソースの作成> Kubernetes Serivce

    • 基本
      • Resource Group : new → てきとー
      • Kubernetesクラスタ名
      • Kubernetesバージョン: 1.13.7
      • ノード数:3
    • ネットワーク
      • HTTPアプリケーションのルーティング:はい

Azure CLIから作る場合

$ az login
$ az group create --name MC-YOSHIO-AKS-1137 --location japaneast
$ az network vnet create --resource-group  MC-YOSHIO-AKS-1137 \
     --name AKSVnet --address-prefixes 10.0.0.0/8 --subnet-name myAKSSubnet \
     --subnet-prefix 10.240.0.0/16
$ az network vnet subnet create --resource-group MC-YOSHIO-AKS-1137 \
     --vnet-name AKSVnet --name AKSSubnet --address-prefixes 10.241.0.0/16
$ az ad sp create-for-rbac --skip-assignment
$ az role assignment create --assignee fa035d21-1dc7-4009-8d70-df401225ded4 \
     --scope /subscriptions/****/resourceGroups/MC-YOSHIO-AKS-1137/providers/Microsoft.Network/virtualNetworks/AKSVnet \
     --role Contributor
$ az aks create \
   --resource-group MC-YOSHIO-AKS-1137 \
   --name yoshioAKSCluster1137 \
   --kubernetes-version 1.13.7 \
   --node-count 3 \
   --enable-addons monitoring \
   --generate-ssh-keys

kubectlからAKSを操作する

kubuctlのインストールは az aks install-cliでもできる

credentialを作る(azure-cliが要る)

$ az ask get-credentials --resource-group リソースグループ名 \
                         --name Kubernetesクラスタ名

Podを作る(deployment.yaml)

  • metadata/name
  • template/metadata/labels/version
  • template/spec/containers/image : dockerイメージ名を指定する

ACRのcredentialを作る

$ kubectl create secret docker-registry docker-reg-credential \
          --docker-server=******.azurecr.io
          --docker-username=foo-bar \
          --docker-password=+********************/**********  \
          [email protected]

podをデプロイする

$ kubectl apply -f deployment.yaml

Serviceを作る(service.yaml)

  • metadata/labels/app
  • metadata/name
  • selector/app : pod名を指定する
  • type : ClusterIPにする
$ kubectl apply -f service.yaml

ローカルで疎通確認

$ kubectl port-forward -p 28080:8080 pod名
$ kubectl port-forward -p 28080:8080 kube-yoshio-7d465f455b-pt44j
$ curl http://localhost:28080/sample/hello

Ingressを設定する(ingress.yaml)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kube-yoshio
  annotations:
    kubernetes.io/ingress.class: addon-http-application-routing
spec:
  rules:
  - host: ****.japaneast.aksapp.io
    http:
      paths:
      - backend:
          serviceName: kube-yoshio
          servicePort: 80
        path: /
$ kubectl apply -f ingress.yaml

IngressのDNS名でアクセスする(IPでアクセスしちゃダメ)

CI/CDやってみよう

AzureポータルでDevOps Projectを作る

  • 新しいサービス→DevOps Project
    • Java > Spring > Kubernetes Service
    • Project name: てきとー
    • Azure DevOps Organization: てきとー
    • Use Existing: すでにAKSがあるから(Create Newを選ぶとAKSも作ってくれる)
    • Cluster name: てきとー
    • Location: East Asia (Japanには作れない)

作ったDevOps Projectに移動する(Azure DevOpsにサインインするとなぜか迷子になる)

サンプルプロジェクトとサンプルのパイプラインができてるので、ほっときゃデプロイされてる。

注意事項

  • dockerに関すること
    • docker pushするときlatest tagは使っちゃダメ。tagはビルド番号使おう
      • podを作ったときによってlatestの内容がかわっちゃうでしょ
    • 小さいイメージの作成を心がけよう。alpineっていう軽量版を探すとか、マルチステージビルドを考えよう
    • パーミッションをちゃんと設定しとけ
    • DockerHubをうかつに信用すんな
  • k8sに関すること
    • リソース使用量はちゃんと指定しようね。
    • Labelは重要。そのうち形式知になるといいね。
    • こまったらこのコマンドをたたけ
      1. kubectl describe pod
      2. kubectl log POD_NAME
      3. kubectl exec -it POD_NAME /bin/sh
      4. kubectl get events -w
      5. Deploy Ubuntu pod in same NameSpace
    • 文句言わねぇでメッセージ(英語)読め!!
    • シンプルが一番
    • podのストレージは使っちゃダメ(API使って永続化を試みた方がマシ)
    • podのログは標準出力に出せ(Azureだと、ログを監視するサービスがあるんですよ)
    • DBみたいなスケールアップするようなサービスはk8sに向かない(普通にマネージドサービス使おう)
@masanobuimai
Copy link
Author

おねだんについて

うっかり使ってると請求されるから、遊んでみるなら無償期間中にだね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment