2
Help us understand the problem. What are the problem?

posted at

updated at

[ACK] Alibaba CloudのKubernetesを使ってみる

スクリーンショット 2021-06-20 2.20.24.png
https://www.alibabacloud.com/ja/product/kubernetes

クラスター作成

設定

スクリーンショット 2021-06-20 2.25.59.png

クラスタータイプ
ACK managed Edition

クラスター名
k8s-test

クラスタースペック
Standard edition

リージョン
東京

Kubernetesバージョン
1.20.4-aliyun.1

コンテナランタイム
Docker 19.03.15

VPC
k8s-vpc(192.168.0.0/16)

ネットワークプラグイン
Terway (or Flannel)
参考: [ACK] Terwayについて

IPVLAN
ON

NetworkPolicy
ON

VSwitch
k8s-vswitch-a(Tokyo Zone A - 192.168.0.0/24)
k8s-vswitch-b(Tokyo Zone B - 192.168.1.0/24)

ポッド VSwitch
k8s-terway-vswitch-a(Tokyo Zone A - 192.168.2.0/24)
k8s-terway-vswitch-b(Tokyo Zone B - 192.168.3.0/24)

Service CIDR
172.21.0.0/20

SNATの設定
ON

APIサーバへのアクセス
slb.s2.small

セキュリティグループ
高度なセキュリティグループの作成

EIPでAPIサーバの公開
ON

インスタンスタイプ
4コア8G(ecs.c6.xlarge)

数量
2

システムディスク
SSDクラウド 40GiB

オペレーティングシステム
Alibaba Cloud Linux 2.1903

ログイン
キーペア

キーペア名
k8s-test

Ingressの作成
ON

SLBネットワークタイプ
インターネット

SLBの仕様
slb.s2.small

ボリュームプラグイン
CSI

ECSインスタンス上でCloudMonitorエージェントをインストール
ON

Prometheus監視の有効化
ON

デフォルトのアラートテンプレートを仕様
OFF

Log Serviceの使用
ON

Ingressダッシュボードの作成
ON

node-problem-detectorをインストール
ON

コントロールプレーン
有効にする

コンポーネントのログ
プロジェクトの作成

スクリーンショット 2021-06-21 21.24.39.png

terraform

versions.tf
terraform {
  required_version = "~> 1.0.0"

  required_providers {
    alicloud = {
      source  = "hashicorp/alicloud"
      version = "~> 1.124.2"
    }
  }
}
provider.tf
provider "alicloud" {
  region = "ap-northeast-1"
}
k8s.tf
resource "alicloud_vpc" "vpc" {
  cidr_block = "192.168.0.0/16"
}

resource "alicloud_vswitch" "k8s_a" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "192.168.0.0/24"
  zone_id    = "ap-northeast-1a"
}

resource "alicloud_vswitch" "k8s_b" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "192.168.1.0/24"
  zone_id    = "ap-northeast-1b"
}

resource "alicloud_vswitch" "k8s_terway_a" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "192.168.2.0/24"
  zone_id    = "ap-northeast-1a"
}

resource "alicloud_vswitch" "k8s_terway_b" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "192.168.3.0/24"
  zone_id    = "ap-northeast-1b"
}

resource "alicloud_cs_managed_kubernetes" "k8s_test" {
  name         = "k8s-test"
  cluster_spec = "ack.standard"
  version      = "1.20.4-aliyun.1"
  platform     = "AliyunLinux"
  service_cidr = "172.22.0.0/16"
  pod_cidr     = "172.23.0.0/20"
  worker_vswitch_ids = [
    alicloud_vswitch.k8s_a.id,
    alicloud_vswitch.k8s_b.id
  ]
  pod_vswitch_ids = [
    alicloud_vswitch.k8s_terway_a.id,
    alicloud_vswitch.k8s_terway_b.id
  ]
  worker_number                = 2
  worker_instance_types        = ["ecs.c6.xlarge"]
  worker_disk_category         = "cloud_ssd"
  worker_disk_size             = 40
  new_nat_gateway              = true
  slb_internet_enabled         = true
  install_cloud_monitor        = true
  is_enterprise_security_group = true
  enable_ssh                   = false
  load_balancer_spec           = "slb.s2.small"
  key_name                     = "k8s-test"

  runtime = {
    name    = "docker"
    version = "19.03.5"
  }

  dynamic "addons" {
    for_each = var.cluster_addons
    content {
      name   = lookup(addons.value, "name", var.cluster_addons)
      config = lookup(addons.value, "config", var.cluster_addons)
    }
  }

  timeouts {
    create = "30m"
  }
}

variable "cluster_addons" {
  type = list(object({
    name   = string
    config = string
  }))

  default = [
    {
      "name"   = "nginx-ingress-controller",
      "config" = "{\"IngressSlbNetworkType\":\"internet\"}",
    },
    {
      "name"   = "terway-eniip",
      "config" = "",
    },
    {
      "name"   = "csi-plugin",
      "config" = "",
    },
    {
      "name"   = "csi-provisioner",
      "config" = "",
    },
    {
      "name"   = "logtail-ds",
      "config" = "{\"IngressDashboardEnabled\":\"true\",\"sls_project_name\":\"k8s-test-ingress-log\"}",
    },
    {
      "name"   = "ack-node-problem-detector",
      "config" = ""
    },
    {
      "name"   = "ack-arms-prometheus",
      "config" = ""
    }
  ]
}

Nginxを立ち上げる

Deployment > テンプレートによる作成
またはkubectl applyで作成します。

スクリーンショット 2019-12-01 16.42.02.png

nginx-sample.yaml
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: hoge.クラスターID.ap-northeast-1.alicontainer.com
      http:
        paths:
          - backend:
              serviceName: nginx-svc
              servicePort: 80
            path: /
status:
  loadBalancer: {}

上記でnginxのPod, Service, Ingressを作成します。
Ingressのhostを
hoge.クラスターID.ap-northeast-1.alicontainer.com
に設定することでパブリックからアクセスができるようになります

スクリーンショット 2019-12-01 16.53.24.png

Prometheus監視

スクリーンショット 2021-06-19 20.36.36.png

デフォルトリソース

  • Ack Pro ApiServer
  • Ack Pro Etcd
  • Ack Pro Scheduler
  • Bloackbox-Exporter
  • CoreDns
  • CIS Cluster
  • CIS Nodes
  • Deamonset
  • Deployment
  • Events
  • GPU APP
  • GPU Node
  • InfluexDB
  • Ingress
  • Kubernetes Overview
  • Node Details
  • Node Summary
  • Node TopN
  • Physical Resources
  • Pod
  • Pod TopN
  • Prometheus
  • StatefulSet
  • Workload

ログ監視

検索・分析

ログ監視はLog Serviceを利用します
先ほど立ち上げたNginxにLogエージェントの設定してみます

デプロイメント > nginx > 編集 > ログの設定 > ログサービス > 採集配置

nginx-log: stdout

スクリーンショット 2019-12-01 17.48.06.png

または、Podリソースに以下を追加

    env:
    - name: aliyun_logs_ngix-log
      value: stdout

参考: Log Service を使用した Kubernetes クラスターログの収集

設定が完了したら
Log Service > k8s-log-クラスターID > nginx-log
から検索や分析機能が利用できます

スクリーンショット 2019-12-01 17.54.30.png

スクリーンショット 2019-12-01 17.57.32.png

ログアラート

Log Serviceの「新規アラームに保存」ボタンからアラームが設定できます

条件式で設定が可能です
https://jp.alibabacloud.com/help/doc-detail/98379.htm
https://jp.alibabacloud.com/help/doc-detail/91785.htm#h2-url-6

スクリーンショット 2019-12-01 18.04.08.png

K8s Eevent Dashboad

Log Service > K8s イベントセンター

スクリーンショット 2021-06-26 16.05.56.png

  • Event Overview
  • Event Details
  • Pod Lifecycle
  • Node Event
  • Event Core
  • Custom Query
  • Alert Configuration
  • バージョンの更新

Ingress Dashboad

スクリーンショット 2020-02-29 19.38.04.png

参考: [ACK] Ingressのログ・データ可視化

モニタリング

ECS(Nodes)

Cloud Moitor > ECSモニタリング

スクリーンショット 2021-06-21 22.53.02.png

Kubernetes Group(Pods)

Cloud Monitor > グループモニタリング > クーベルネテスグループ
スクリーンショット 2021-06-21 22.40.04.png

スクリーンショット 2021-06-21 22.37.41.png

カタログ

Helm Chartのパッケージです

スクリーンショット 2021-06-26 14.14.26.png

CI/CD

スクリーンショット 2021-06-26 14.10.20.png

Jenkins

アプリのカタログ > ack-jenkins > デプロイ

スクリーンショット 2019-12-01 17.10.08.png

デフォルトではServiceにパブリックロードバランサーが紐づきます
ユーザー、パスワードはシークレットに保存されてます

スクリーンショット 2019-12-01 17.23.11.png

Argo CD

アドオン管理 > appcenter > インストール

スクリーンショット 2021-06-26 14.19.12.png

namespace appcenter インストールされます

スクリーンショット 2021-06-26 14.22.59.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?