# Tako Team Note 2020/2/20 --- ## 1. Azureアカウントを2つ作成  小野さん、猿舘さんがAzureアカウント(無料)を作成 ## 2. 踏み台サーバーを1つ作成  小野さんのAzureアカウントにてGUI(Web)から作成 --- ### 2-1 Dockerインストール ``` sudo apt-get update ``` ``` sudo apt-get install apt-transport-https ca-certificates curl software-properties-common ``` ``` curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - ``` ``` sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable test edge" ``` ``` sudo apt-get update ``` ``` sudo apt-get install docker-ce ``` --- sudoコマンドなしで ``` # dockerグループがなければ作る sudo groupadd docker # 現行ユーザをdockerグループに所属させる sudo gpasswd -a $USER docker # dockerデーモンを再起動する (CentOS7の場合) sudo systemctl restart docker # exitして再ログインすると反映される。 exit ``` --- ### 2-2 azcliインストール ``` curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash ``` --- ### 2-3 javaソースの作成 ``` git clone https://github.com/yoshioterada/k8s-Azure-Container-Service-AKS--on-Azure ``` --- ### 2-4 Dockerfile作成 cloneした FrontService/0-Dockerfile-for-Maven だと思われ... --- ### 2-5 Dockerイメージ作成 1-Dockerfile-Multi build→build-tako 2箇所を修正(必要があった訳ではない) ``` docker build [ -t {イメージ名} [ :{タグ名} ] ] {Dockerfileのあるディレクトリ} docker build -t maven-include-localrepo:1.0 #docker build -t maven-include-localrepo:1.0 . -f 0-Dockerfile-for-Maven #pdfにあった記載 #docker build -t maven-include-localrepo:1.0 . # -fで指定しなければDockerfileが呼ばれる 打ったやつ↓ docker build -t maven-include-localrepo-tako:1.0 . -f 0-Dockerfile-for-Maven docker build -t tako-front-service:1.0 . -f 1-Dockerfile-Multi ``` --- ### 2-6 Dockerイメージ動作確認 ``` docker images ``` ``` docker run -p 8080:8080 -it tako-front-service:1.0 ``` ``` curl http://localhost:8080/sample/hello ``` --- ### 2-7 バージョン違いのイメージ作成と動作確認 ``` docker build -t tako-front-service:1.1 . -f 1-Dockerfile-Multi ``` ``` docker run -p 8080:8080 -it tako-front-service:1.1 ``` --- ## 3. AKSの作成  猿舘さんのAzureアカウントにてGUI(Web)から作成 ### 3-1 kubectlインストール ``` sudo az aks install-cli az login #URLが出てくるのでブラウザでログインする #認証コードを入力する #az aks get-credentials --resource-group myResourceGroup --name myAKSCluster az aks get-credentials --resource-group tako-k8s-reee --name tako-k8s-cluster ``` レジストリ:takok8s ログインサーバ:takok8s.azurecr.io ``` kubectl create secret docker-registry docker-reg-credential --docker-server=takok8s.azurecr.io --docker-username=takok8s --docker-password="nSV0CZ3jo6DbwN+h4bfDBsCGeXqGTK+c" --docker-email=mutenet.sarudate@gmail.com ``` ### 3-2 dockerログイン ``` docker login -u takok8s takok8s.azurecr.io ``` ### 3-3 docker イメージをACRにpushする ``` #名前空間を設定 docker tag ika/front-service:1.0 ikak8s.azurecr.io/ika/front-service:1.0 ``` ``` #docker tag ika/front-service:1.1 ikak8s.azurecr.io/ika/front-service:1.1 docker tag tako-front-service:1.0 takok8s.azurecr.io/tako/front-service:1.0 docker push takok8s.azurecr.io/tako/front-service:1.0 #同様に1.1もpush ``` ``` kubectl apply -f 4-create-deployment-svc.yaml ``` ``` apiVersion: apps/v1 kind: Deployment metadata: name: tako-front-service #ここでdeploymentを分ける spec: replicas: 2 selector: matchLabels: app: tako-front-service #ラベル? # ~~ #中略 # ~~ template: metadata: labels: app: tako-front-service #selectorの判別用 version: v1 #判別用 stage: staging spec: securityContext: runAsUser: 1000 imagePullSecrets: - name: docker-reg-credential containers: - name: tako-front-service #コンテナ名 image: takok8s.azurecr.io/tako/front-service:1.0 ##イメージ名 env: - name: TZ value: JST-9 ``` ### deploymentの追加 metadataのnameを変えると別のdeploymentとして認識される 同じままだと上書きになる ### serviceの追加 Service YAMLを適用 ``` kubectl apply 11-Service.yaml ``` Service 作成の確認 ``` kubectl get svc ``` - TYPE:ClusterIPのサービスが追加される ### 一時的にIPの割り当て - 外部IPを割り当てるためにyamlのTYPEをLoadBalancerに変更し、再度apply 外部IPが割り当てられるため、ブラウザで確認 http://{EXTERNAL-IP}/sample/hello - 再びapplyして元に戻そうとしても戻せないため、直接既存の設定を変更 ``` kubectl edit svc/tako-front-service ``` - nodePortの行を消す - LoadBalancer -> ClusterIPに戻す ### Ingressの追加 ポータルのAKSサービスからHTTP アプリケーションのルーティング ドメインを選択し、hostに設定 2eda1cfdd3664b858a2b.japaneast.aksapp.io ingressでbackendを複数もつ ``` - host: v1.2eda1cfdd3664b858a2b.japaneast.aksapp.io http: paths: - backend: serviceName: tako-front-service-v1-1 servicePort: 80 path: /v2 #v1.2eda1cfdd3664b858a2b.japaneast.aksapp.io/v2/sample/hello - backend: serviceName: tako-front-service servicePort: 80 path: / #v1.2eda1cfdd3664b858a2b.japaneast.aksapp.io/sample/hello ``` ## 4. ACRの作成 ## 注意点 ・latestタグを使わない ・小さいサイズのイメージを作る ・ユーザのパーミッションは設定しよう ・Docker Hubのイメージをむやみに信じない ・Docker Fileの記述は、変更があるものを最下部に書く ・Podのリソース使用量を適切に設定する(他Podへの影響をなくす) ・SelectorとLabelの理解は重要 ・Serviceで極力LoadBalancerは使用しない ・無理にk8sのすべての機能を利用する必要はない。適材適所 ・複雑な構成を作らない ・k8sのポータビリティはある点とない点がある ・バージョンごとに設定や機能の差異がある (後方互換性はJavaのほうが優秀。サードパーティ系のプラグインを使うときはより注意) ・大規模k8sクラスタを構築しない (ノード数を多く作らない) クラスタの寿命を考える(AKSの場合は約1年半でEOL) 作ったものは必ず壊れるという前提意識をもつ ・k8sのアップグレードは慎重に  まずは新バージョンの新規クラスタを構築  何か問題があった時に旧バージョンのクラスタに戻せる ・Volumeは極力使わない ・k8s以外の選択肢も考える (30くらいのサービスであればWeb App for Containersや Containerのほうが運用管理が楽) ## Topic ・DBはマネージドサービスを利用 ・k8s上で稼働するアプリのデバッグ(Azure DevOps) ・Azure Managedなモニタリング (他モニタリングツールの設定不要) ## 問題が発生した時よく使うコマンドベスト5 ``` kubectl describe pod ``` ``` kubectl logs POD_NAME ``` ``` kubectl exec -it POD_NAME /bin/sh ``` ``` kubectl get events -w ``` ``` Deploy Ubuntu POD in same NameSpace ```
{"metaMigratedAt":"2023-06-15T04:30:52.031Z","metaMigratedFrom":"Content","title":"Tako Team Note","breaks":true,"contributors":"[{\"id\":null,\"add\":5384,\"del\":171},{\"id\":\"3842a4fa-0ed2-4b74-b12e-d02562d24a05\",\"add\":707,\"del\":336}]"}
    307 views