KubeStackを使用してAKSにGOベースのアプリケーションを配備する
17041 ワード
このポストでは、私はあなたをKubernetesにGolangアプリケーションを配備する方法を示していますKubestack . KubeStackは、開発速度の展開と増加のリスクを減らすために、Traformに組み込まれたGITOPSオートメーションです.KubeStackを使ってKubernetesのマニフェストをどのように展開するかをカバーする方法はないと言われています.KubeStackのパイプラインの起動方法の詳細についてはhere .
さあ飛び込みましょう.
セットアップ
あなたのフォルダ構造を設定したkubestackパイプラインを一度このようにしてください
開く
次のコマンドを実行します.
次に、実行中にこれらの変更をローカルでテストすることができます
展開へのアクセス
書き込みの際に有効なドメインを持っていないので、展開にアクセスするために私のIngress Controller外部IPを使用していますが、ドメインが適切に設定されている場合は
Kubestack ドキュメント.
まず、Ingressコントローラの外部IPを使用します.
http://prod.evil.corp
結論
このポストでは、私はKubeStackを使用してKubenetesマニフェストを展開する方法をカバーします.これはKubetackとしてAzureに限られていないことに注意してください、また、このポストを書くとき、KubetackもGKEとAWSを支持します
documentation プロバイダ固有の手順については.今すぐ行くとgit展開😄
さあ飛び込みましょう.
セットアップ
あなたのフォルダ構造を設定したkubestackパイプラインを一度このようにしてください
.
├── Dockerfile
├── Dockerfile.loc
├── README.md
├── aks_zero_cluster.tf
├── aks_zero_ingress.tf
├── aks_zero_providers.tf
├── manifests
└── versions.tf
Kubernetesマニフェストを展開するには、クラスタサービスモジュールを使用します.KubeStackでのクラスタサービスモジュールでは、Torraformが直接Torraformを介してKubernetesと対話することができます.これは展開を作成し、名前空間を作成するようなものを展開します.など開く
ask-zero_cluster.tf
次の行を追加します ...
module "custom_manifests" {
providers = {
kustomization = kustomization.aks_zero
}
source = "kbst.xyz/catalog/custom-manifests/kustomization"
version = "0.1.0"
configuration = {
apps = {
namespace = "apps-${terraform.workspace}"
resources = [
"${path.root}/manifests/apps/namespace.yaml",
"${path.root}/manifests/apps/deployment.yaml",
"${path.root}/manifests/apps/service.yaml",
"${path.root}/manifests/apps/ingress.yaml"
]
common_labels = {
"env" = terraform.workspace
}
}
ops = {}
loc = {}
}
}
ここでは、カスタムマニフェストクラスタサービスモジュールを初期化し、既存のaks_zero
モジュールを使用します. providers = {
kustomization = kustomization.aks_zero
}
構成ブロックは、魔法が発生する場所です.最初に、私たちは、我々のリソースを使用するためにどのようなワークスペースを展開するかを宣言します
apps = {
namespace = "apps-${terraform.workspace}"
resources = [
"${path.root}/manifests/apps/namespace.yaml",
"${path.root}/manifests/apps/deployment.yaml",
"${path.root}/manifests/apps/service.yaml",
"${path.root}/manifests/apps/ingress.yaml"
]
common_labels = {
"env" = terraform.workspace
}
}
次に、マニフェストを使用してどの名前空間を展開するかを宣言しますnamespace = "apps${terraform.workspace}"
これはapps-ops
or apps-apps
現在のワークスペースに応じて、次のリソースブロックは、現在のディレクトリ内のマニフェストフォルダーを展開したいマニフェストを参照してください.クラスタモジュールをセットアップしたので、マニフェストを作成しましょう.次のコマンドを実行します.
mkdir manifests/apps && cd manifests/apps && touch deployment.yaml service.yaml ingress.yaml
ファイルを次のコードで設定します.# manifests/apps/namespace.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: apps-apps
---
apiVersion: v1
kind: Namespace
metadata:
name: apps-ops
注:これは新鮮なKubernetesクラスタであるので、KubeStackが名前空間のようにモジュールで指定された順序でリソースを展開するので、名前空間のマニフェストを含んでいますapps-apps
が最初に存在する必要があります.#manifests/apps/deployment.yaml
--------
apiVersion: apps/v1
kind: Deployment
metadata:
name: ping-api
spec:
selector:
matchLabels:
app: ping-api
template:
metadata:
labels:
app: ping-api
spec:
containers:
- name: ping-api
image: ghcr.io/s1ntaxe770r/evil-ekow:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 8080
env:
- name: REDIS_CACHE_HOST
value: "redis-svc"
- name: REDIS_PORT
value: "6379"
--------
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
spec:
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:alpine
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 6379
# manifests/apps/service.yaml
--
apiVersion: v1
kind: Service
metadata:
name: redis-svc
spec:
selector:
app: redis
ports:
- port: 6379
targetPort: 6379
--------
apiVersion: v1
kind: Service
metadata:
name: ping-svc
spec:
selector:
app: ping-api
ports:
- port: 80
targetPort: 8080
# manifests/apps/ingress.yaml
--------
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myingress
labels:
name: myingress
spec:
rules:
- host: prod.evil.corp
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: ping-svc
port:
number: 80
上記のマニフェストは、Redisを使用してキー値のペアを格納するAPIのバージョンを展開します.ソースコードをチェックアウトできますhere .次に、実行中にこれらの変更をローカルでテストすることができます
kbst apply local
, すべてがよくなるならば、あなたは以下のようにタグをつけて、配備することができなければなりません:$ git tag apps-deploy-1
$ git push origin apps-deploy-1
展開へのアクセス
書き込みの際に有効なドメインを持っていないので、展開にアクセスするために私のIngress Controller外部IPを使用していますが、ドメインが適切に設定されている場合は
Kubestack ドキュメント.
まず、Ingressコントローラの外部IPを使用します.
$ kubectl get ingresses -A
次に、次のエントリを作成します/etc/hosts
10.10.20.5 prod.evil.corp
あなたのIngressコントローラ外部IPにIPを変えるようにしてくださいhttp://prod.evil.corp
結論
このポストでは、私はKubeStackを使用してKubenetesマニフェストを展開する方法をカバーします.これはKubetackとしてAzureに限られていないことに注意してください、また、このポストを書くとき、KubetackもGKEとAWSを支持します
documentation プロバイダ固有の手順については.今すぐ行くとgit展開😄
Reference
この問題について(KubeStackを使用してAKSにGOベースのアプリケーションを配備する), 我々は、より多くの情報をここで見つけました https://dev.to/s1ntaxe770r/deploying-a-go-based-app-to-aks-using-kubestack-2ollテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol