Mais conteúdo relacionado Semelhante a AKSを活用した社内向けイベント支援プラットフォームをリリースした話 (20) AKSを活用した社内向けイベント支援プラットフォームをリリースした話5. Agenda
• グレゴリオとは
• デザインプロセス
• Azure Kubernetes Service
• Azure ARM Template
• Kubernetes(ingress/cert-manager/helm/hpa)
• Monitor/Log Analytics
• k9s
• Azure Container Registry
• CI/CD
• drone.io
5
15. ペルソナの作成
• ペルソナとは
• 商品やサービスのターゲットとなる架空のユーザー像
• その人物が実在しているかのように、年齢・性別・居住地・職業・役
職・年収・趣味・価値観・家族構成・休日の過ごし方・ライフスタイ
ル・ネットリテラシーなどリアリティのある詳細な情報を設定する
• ペルソナを作成するメリット
• ユーザーファーストが実現されやすい
• チーム内で、ターゲットの人物像への認識をより統一できる
• 「こういう時ペルソナならどうするかな?」みたいな会話が生まれる
15
29. Azure ARM Template
• Azureリソースの構成情報をJSONに落とし込むことで、
Infrastructure as Codeを実現することができる
• コードをGitHubで管理することで、パラメータシートの代わり
となり得る
• ただし、コード化することにこだわりすぎないようにしている。
初期セットアップがだれがやってもすぐに実現できる。くらい
に考えている。
29
30. Azure ARM Template vNet構築例
"resources": [
{
"apiVersion": "2018-10-01",
"type": "Microsoft.Network/virtualNetworks",
"name": "[parameters('vnetName')]",
"location": "[parameters('location')]",
"tags": {
"Environment": "[parameters('environmentTag')]",
"Service": "[parameters('serviceTag')]"
},
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('vnetAddressPrefix')]"
]
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-
01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vnetName": {
"value": “testvnet"
},
"vnetAddressPrefix": {
"value": “xx.xx.xx.xx/24"
},
"subnetPrefix": {
"value": “xx.xx.xx.xx/24"
},
"subnetName" : {
"value": “testsubnet"
azuredeploy.json(一部抜粋) azuredeploy.parameters.json(一部抜粋)
$ az group deployment create -g $RG -n vnet-create --mode Incremental --template-file azuredeploy.json `
--parameters "@azuredeploy.parameters.json"
30
32. Azure ARM Template Secret情報の取り扱い
• 例えばSQL Databaseの管理者パスワードなど、GitHub上で管
理できないSecret情報は以下のように指定しています
• Azure Key Vaultでも管理できるようですが、そこまではやっ
てません
$ az group deployment create -g $RG -n sqldb-create --mode Incremental --template-file azuredeploy.json `
--parameters "@azuredeploy.parameters.json" `
--parameters sqlAdministratorLoginPassword=[Your Any Password]
32
34. Azure ARM Template
• もし壊れてもすぐに一から作り直せる安心感はいい
• AKS環境の場合、頻繁に変更が入るのは、Kubernetesの中
(マニフェストファイル)なので、ARM Templateファイルの
変更はまれ。
• コード化に拘りすぎないようにする
34
35. Azure ARM Template
• 詳細な手順はQiitaにまとめているので参考にしてください
• https://qiita.com/shingo_kawahara/items/c65ed88da717f52c4f79
35
37. ステージング環境
• 本番とステージングで異なる設定は、
• ステージングは監視していない
• AKSのバージョン(patch)が異なる
• AKSのバージョンを本番とステージングで完全に一致させたいのであれば、
本番環境を作った時と同じタイミングでステージングも作ったほうがよい
• 1.X.Y
• patch部分のアップデートが早くて、数か月で過去バージョンのクラスターが作れな
くなってしまう
37
[major].[minor].[patch]
Example:
1.12.14
1.12.15
43. Ingress Controllerでネットワーク制御
• Ingress Controller作成時に
「controller.service.externalTrafficPolicy=Local」オプショ
ンを付与する
$ helm install stable/nginx-ingress
--namespace [Your Namespace]
--set controller.service.loadBalancerIP="[Public IP]"
--set controller.replicaCount=2
--set controller.service.externalTrafficPolicy=Local
43
49. Helm install
$ helm install
--name cert-manager
--namespace cert-manager
--version v0.7.0
jetstack/cert-manager
49
51. Helm history
$ helm history cert-manager
REVISION UPDATED STATUS CHART DESCRIPTION
1 Wed Jun 19 16:35:26 2019 SUPERSEDED cert-manager-v0.7.0 Install complete
2 Wed Oct 16 19:49:15 2019 DEPLOYED cert-manager-v0.8.0 Upgrade complete
51
53. Helm history
$ helm history cert-manager
REVISION UPDATED STATUS CHART DESCRIPTION
1 Tue Sep 24 23:08:30 2019 SUPERSEDED cert-manager-v0.7.0 Install complete
2 Wed Oct 16 19:34:38 2019 SUPERSEDED cert-manager-v0.8.0 Upgrade complete
3 Wed Oct 16 19:42:03 2019 DEPLOYED cert-manager-v0.7.0 Rollback to 1
53
59. Horizontal Pod Autoscaler
• Podのリソース使用状況に応じて、自動的にスケールアウトす
る機能
kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v1
metadata:
name: front-hpa
labels:
environment: prod
spec:
scaleTargetRef:
kind: Deployment
apiVersion: apps/v1
name: front
minReplicas: 2
maxReplicas: 4
targetCPUUtilizationPercentage: 50
Helm
nginx-Ingress
ClusterIP
Pod
Front
Pod
Front
NameSpace
Helm
nginx-Ingress
ClusterIP
Pod
Front
Pod
Front
NameSpace
Pod
Front
Pod
Front
59
62. ヘルスチェック
initialDelaySeconds: 15
timeoutSeconds: 2
periodSeconds: 10
successThreshold: 1
failureThreshold: 5
• initialDelaySeconds
• 最初にコンテナが起動されてから、ヘルスチェックするまでどれくらい待つか
• timeoutSeconds
• タイムアウトまでの秒数
• periodSeconds
• ヘルスチェック間隔
• successThreshold
• 何回ヘルスチェックが成功したらPodが正常だと判断するか
• failureThreshold
• 何回ヘルスチェックが失敗したらPodが異常だと判断するか
62
65. Graph API
• Microsoft Cloudサービスリソースへのアクセスを可能にするRESTful
Web API
• 今回の開発では、以下のような機能をGraph APIで実現しています
• 申込みをすると、自動的にOffice 365 Outlookカレンダーに予定を登録する
• 申込み時に、上司に承認メールを送る
• 上司から却下されたときにメールを送る
• Azure ADからユーザ一覧を取ってくる
65
68. Azure Log Analytics
• Log Analytics連携設定をしておくと、各種メトリックやstdoutを集約す
ることができるので、分析が可能に。
• 以下はKubernetesクラスターの1か月間の平均CPU使用率の推移
68
73. Azure Log Analytics
• アラート機能としては使えますが、実際障害があったときに、Log
Analyticsから原因調査するのはちょっと辛い
• kubectl logsやdescribeといったコマンドベースで調査したほうがやりや
すい
73
77. Azure Container Registry
• コンテナイメージを格納するプライベートリポジトリ
• Kubernetesマニフェストファイルの中で、ACRのイメージを指定するこ
とで、AKSがACRから直接pullして、コンテナ起動する
spec:
containers:
- name: front
image: [ACR-URL]/[Image Name]:[Tag]
imagePullPolicy: Always
ports:
- containerPort: 80
name: front-http
77
Developer
① kubectl apply
② pull
78. Azure Container Registry
• AKS作成時にサービスプリンシパルを指定しますが、そのサービスプリン
シパルがACRPull権限を持っていないと、コンテナデプロイ時にエラーに
なるので、ACRのIAM設定で権限付与しておきます
78
79. Azure Container Registry 脆弱性スキャン
• 先日のIgnite 2019で、ACRの脆弱性スキャン機能がプレビューリリース
されました!
• 早速組み込んでみました。
• 脆弱性スキャン機能は、Security Centerに統合されているため、ACRか
らではなく、Security Centerから設定します。
• Security Centerから設定が終わると、ACRにイメージをPushしたら自動
的に脆弱性スキャンされるようになります
79
82. Azure Container Registry 脆弱性スキャン
• $0.29 / Scan なので頻繁にPushする環境だと注意しないといけない
• いまのところ通知機能がない
• スキャン結果の詳細をSlack通知したり、RESTAPIで取れるようになると使いどころ
が広がってくる
• とはいえ、Azureサービスの中で脆弱性スキャンできるのは非常に便利な
ので、今後どんどん使いやすくなることに期待です!!
82
83. Azure Container Registry 脆弱性スキャン
• 詳細な手順はQiitaにまとめているので参考にしてください
• https://qiita.com/shingo_kawahara/items/445e80d4820f86f387c6
83
89. .drone.yml
kind: pipeline
name: staging
steps:
- name: build
image: node:10.16.0-alpine
environment:
GREGORIO_CLIENT_ID:
from_secret: GREGORIO_CLIENT_ID_STAG
GREGORIO_TENANT_ID:
from_secret: GREGORIO_TENANT_ID_STAG
GREGORIO_API_BASE_URL:
from_secret: GREGORIO_API_BASE_STAG_URL
GREGORIO_VERSION: ${DRONE_COMMIT_SHA:0:8}
commands:
- yarn install
- yarn run build
- name: test
image: node:10.16.0-alpine
commands:
- yarn run test
buildステップ
testステップ
secretはdroneのWebUIから事前設定
GitHubのコミットハッシュ値を指定可能
89
90. ACR Push step
- name: publish
image: plugins/docker
settings:
dockerfile: docker/Dockerfile
username:
from_secret: USERNAME
password:
from_secret: PASSWORD
repo: xxx.azurecr.io/yourimage
registry: xxx.azurecr.io
tags:
- latest
- ${DRONE_COMMIT_SHA:0:8}
when:
branch:
- master
event:
- push
ACRのシークレット情報
ACRのリポジトリ情報
このDockerfileでビルド
latestとコミットハッシュ値をタグにする
このステップは、
masterブランチにマージされたら動く
90
91. AKS Deploy step
- name: deploy
image: azurecli:latest
pull: if-not-exists
environment:
AZURE_APPLICATION_ID:
from_secret: AZURE_APPLICATION_ID
AZURE_SECRET:
from_secret: AZURE_SECRET
AZURE_TENANT_ID:
from_secret: AZURE_TENANT_ID
IMAGE_TAG: ${DRONE_COMMIT_SHA:0:8}
commands:
- echo $IMAGE_TAG
- /usr/bin/az login --service-principal -u $AZURE_APPLICATION_ID
-p $AZURE_SECRET --tenant $AZURE_TENANT_ID
- /usr/bin/az aks install-cli
- /usr/bin/az aks get-credentials -g [Resource Group Name] –n
[k8s Clouster Name]
- kubectl apply –f docker/[k8s Manifest file] –n [Namespace Name]
- kubectl get po -n [Namespace Name]
- kubectl set image deployment.apps/[Pod Name] [Pod
Name]=[ACR Server URL]/[Repository Name]:$IMAGE_TAG -n [k8s
NameSpace]
when:
branch:
- master
event:
- push
azurecliコンテナ内でkubectlのインストールから
AKSクレデンシャル設定まで行う
kubectl applyでAKSにデプロイ
次ページで解説
独自に作ったazurecliコンテナを使った
公式のmcr.microsoft.com/azure-cliでもいけそう
91
Notas do Editor テクノベーションセンターは3年半前にできた組織で、全社のイノベーションを加速させることが目的で設立されました
私はその中で、クラウド・インフラ・コンテナを担当しています
その前までは、自社クラウドの構築と運営をやってきましたが、設立を機にパブリッククラウドを中心に触ることになりました
connpassで申し込んだら自分の普段のカレンダーに登録されるイメージ