Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
てらだよしおまつり 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=+********************/**********  \
          --docker-email=foo-bar@microsoft.com

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

This comment has been minimized.

Copy link
Owner Author

masanobuimai commented Jul 28, 2019

teradayoshio

@masanobuimai

This comment has been minimized.

Copy link
Owner Author

masanobuimai commented Jul 28, 2019

おねだんについて

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.