目次
・Kubernetesクラスター作成
・Nginxを立ち上げる
・Auto Scaling Groupの追加
・メトリクス監視の導入とアラーム追加
・ログ監視の導入とアラーム追加
・Ingressのデータ可視化
・GitOps CDを導入する
・Jenkinsを導入する
クラスター作成
設定
クラスタータイプ ACK managed Edition
クラスター名 k8s-cluster
リージョン 東京
Kubernetesバージョン 1.16.9-aliyun.1
コンテナランタイム Docker 19.03.5
VPC k8s-vpc
192.168.0.0/16
VSwitch1 k8s-vswitch-a
Tokyo Zone A
192.168.0.0/24
VSwitch2 k8s-vswitch-b
Tokyo Zone B
192.168.1.0/24
SNATの設定 ON
パブリックアクセス ON
インターネットSSHログイン OFF
インスタンスタイプ 4コア8G(ecs.sn1.large)
数量 3
システムディスク SSDクラウド 120GiB
オペレーティングシステム Aliyun Linux 2.1903
ログイン キーペア
キーペア名 k8s-keypair
ネットワークタイプ Flannel
ポッドネットワーク CIDR 172.20.0.0/16
Service CIDR 172.21.0.0/20
Ingressの作成 ON
SLBネットワークタイプ インターネット
ボリュームプラグイン CSI
Log Serviceの作成 ON
terraform
resource "alicloud_cs_managed_kubernetes" "k8s-cluster" {
worker_vswitch_ids = [
"vsw-xxxxxx",
"vsw-xxxxxx"
]
service_cidr = "172.20.0.0/16"
pod_cidr = "172.21.0.0/20"
new_nat_gateway = false
proxy_mode = "ipvs"
worker_instance_types = ["ecs.sn1.large"]
worker_number = 3
node_cidr_mask = 24
key_name = "k8s-keypair"
enable_ssh = false
install_cloud_monitor = true
platform = "AliyunLinux"
version = "1.16.9-aliyun.1"
dynamic "addons" {
for_each = var.cluster_addons
content {
name = lookup(addons.value, "name", var.cluster_addons)
config = lookup(addons.value, "config", var.cluster_addons)
}
}
}
variable "cluster_addons" {
type = list(object({
name = string
config = string
}))
default = [
{
"name" = "logtail-ds",
"config" = "{\"IngressDashboardEnabled\":\"true\",\"sls_project_name\":\"your-sls-project-name\"}",
},
{
"name" = "nginx-ingress-controller",
"config" = "{\"IngressSlbNetworkType\":\"internet\"}",
}
]
}
Nginxを立ち上げる
Deployment > テンプレートによる作成
またはkubectl apply
で作成します。
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/service-weight: ''
name: nginx-ingress
spec:
rules:
- host: 適当.クラスターID.ap-northeast-1.alicontainer.com
http:
paths:
- backend:
serviceName: nginx-svc
servicePort: 80
path: /
status:
loadBalancer: {}
nginxのPod, Service, Ingressを作成します。
Ingressのhostを
適当.クラスターID.ap-northeast-1.alicontainer.com
に設定することでパブリックアクセスできるようになります。
デプロイが完了するとデプロイメントに表示されます。
URLから確認してみましょう。
Auto Scaling Groupの追加
Auto Scaling Groupの設定はクラスター構築時に作成されます。
ノードプール > Auto Scalingの設定できます。
メトリクス監視の導入とアラーム追加
メトリクス監視にはCloud Monitorを使います。
イニシャティブアラームというものを使ってみます。
イニシャティブアラームを有効にするとECS(K8s Worker)の
・CPU 使用率
・ディスク使用率
・メモリー使用率
・帯域幅使用率
ロードバランサー(Ingress, Service)の
・破棄した接続数
・破棄した流入帯域幅
・破棄した流出帯域幅
のアラームがデフォルト送信先に設定されます。
デフォルト送信先は登録時のメールアカウントです。
ログ監視の導入とアラーム追加
ログ監視はLog Serviceを利用します。
先ほど立ち上げたNginxにLogエージェントの設定、アラーム追加を行いましょう。
デプロイメント > nginx > 編集 > ログの設定 > ログサービス > 採集配置
nginx-log: stdout
更新します。
Log Service > k8s-log-クラスターID > nginx-log > 検索
から様々な機能が利用できます。
「新規アラームに保存」ボタンからアラーム設定ができます。
こちらで条件式を参考に設定します
https://jp.alibabacloud.com/help/doc-detail/98379.htm
https://jp.alibabacloud.com/help/doc-detail/91785.htm#h2-url-6
Ingressのデータ可視化
Log Serviceとの連携を有効にすることでIngressのダッシュボードを自動構築してくれます。
GitOps CDを導入する
K8s資産管理システムのApplication Centerのを使うことでGitOpsでCDを行うことができます。
詳細はこちら
[ACK] Application CenterでGitOps CDしてみる
Jenkinsを立ち上げる
アプリのカタログ > ack-jenkins > デプロイ
デフォルトではServiceにIPを付与されたロードバランサーが紐づきます。
Serviceが作成されたらサービスメニューから外部エンドポイントを確認してアクセスしてみます。
ユーザー、パスワードはシークレットに保存されてます。