Help us understand the problem. What is going on with this article?

[ACK] Alibaba CloudでKubernetesを構築する

目次

・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

スクリーンショット 2020-09-13 18.53.01.png

terraform

k8s.tf
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で作成します。

スクリーンショット 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: 適当.クラスター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
に設定することでパブリックアクセスできるようになります。

デプロイが完了するとデプロイメントに表示されます。

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

URLから確認してみましょう。

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

Auto Scaling Groupの追加

Auto Scaling Groupの設定はクラスター構築時に作成されます。
ノードプール > Auto Scalingの設定できます。

スクリーンショット 2020-11-22 19.04.41.png

メトリクス監視の導入とアラーム追加

メトリクス監視にはCloud Monitorを使います。
イニシャティブアラームというものを使ってみます。

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

イニシャティブアラームを有効にするとECS(K8s Worker)の

・CPU 使用率
・ディスク使用率
・メモリー使用率
・帯域幅使用率

ロードバランサー(Ingress, Service)の

・破棄した接続数
・破棄した流入帯域幅
・破棄した流出帯域幅

のアラームがデフォルト送信先に設定されます。
デフォルト送信先は登録時のメールアカウントです。

ログ監視の導入とアラーム追加

ログ監視はLog Serviceを利用します。
先ほど立ち上げたNginxにLogエージェントの設定、アラーム追加を行いましょう。

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

nginx-log: stdout

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

更新します。

Log Service > k8s-log-クラスターID > nginx-log > 検索
から様々な機能が利用できます。

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

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

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

こちらで条件式を参考に設定します
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

Ingressのデータ可視化

Log Serviceとの連携を有効にすることでIngressのダッシュボードを自動構築してくれます。

参考
[ACK] Ingressのログ・データ可視化
https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_227849_fbec7330-e972-2af5-1c99-993c6a007990.png

GitOps CDを導入する

K8s資産管理システムのApplication Centerのを使うことでGitOpsでCDを行うことができます。

詳細はこちら
[ACK] Application CenterでGitOps CDしてみる

スクリーンショット 2020-09-13 20.38.51.png

Jenkinsを立ち上げる

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

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

デフォルトではServiceにIPを付与されたロードバランサーが紐づきます。
Serviceが作成されたらサービスメニューから外部エンドポイントを確認してアクセスしてみます。
ユーザー、パスワードはシークレットに保存されてます。

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

taichitk
誕生年: 1986年
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