KitlabとHelmによるKubernetes CI/CDパイプラインの構築
7356 ワード
誰もがgitlab ciとkubernetesが大好きです.
Gitlab CI(連続積分)は、アプリケーションのために書くソフトウェア開発者を構築して、テストするための人気のあるツールです.Gitlab CIは、開発者は、より速く、より自信を持ってコードを構築し、迅速にエラーを検出することができます.
Kubernetesは、一般的にK 8 sに短縮、コンテナ化作業負荷とサービスを管理するための移植性、拡張性、オープンソースのプラットフォームです.K 8 Sはすべてのサイズの企業が展開、スケーリングを自動化し、コンテナ内のアプリケーションを管理するために毎日使用されます.
このポストの目的は、あなたがKubernetesにあなたのアプリケーションを展開することができるように、パズルの連続配信(CD)の部分にどのようにボルトをかけることができるかを示すことです.しかし、我々があまりに遠くに着く前に、我々はパズルの重要な部分であるヘルムについて話す必要がありそうです.
どのような舵?
Helm calls itself "the package manager for Kubernetes". それはかなり正確な説明です.ヘルムは、多彩な、頑丈なツールのdevfsエンジニアは、設定ファイルを定義するために使用することができますし、我々のクラスタに一貫した展開を作成する変数の置換を実行し、異なる環境の異なる変数を持っている.
それは確かに我々がここでカバーしている問題への正しい解決です.
どうやってやるの?
最初に、いくつかの前提条件.あなたがプロジェクトを開始する前に、このすべてのハンマーを持っている必要があります.助けが必要な場合は以下の参考文献へのリンクがあります. あなたは既にAmazon EKS cluster . あなたは既に使用方法を知っているGitLab CI . あなたはGitLab CI runner あなたのKubernetesクラスタで構成されます. あなたはAWS Load Balancer Controller クラスタでの実行 それらのボックスをチェックして、我々は始めることができます.この例で使用するには、まずGitlabで新しいリポジトリを作成します.したら、私たちは私たちのファイルを作成することから始めることができます.
ファイルツリー
基本的に最後に、フォルダ/ファイルの構造は次のようになります.
値.ヤル
展開.ヤル
設定マップ.ヤル
サービスヤル
インドレスヤル
Gitlab CI気象研
わかりました.今何?
さて、すべてのファイルが定義された後、あなたのインフラストラクチャは私たちの前提条件に従っています.
これらのファイルをコミットする場合、gitlabはあなたの
あなたがRouter 53でDNS記録のように構成するならば
このポストは、我々の最初に現れましたblog 我々が書くところdevops and devops consulting services .
Gitlab CI(連続積分)は、アプリケーションのために書くソフトウェア開発者を構築して、テストするための人気のあるツールです.Gitlab CIは、開発者は、より速く、より自信を持ってコードを構築し、迅速にエラーを検出することができます.
Kubernetesは、一般的にK 8 sに短縮、コンテナ化作業負荷とサービスを管理するための移植性、拡張性、オープンソースのプラットフォームです.K 8 Sはすべてのサイズの企業が展開、スケーリングを自動化し、コンテナ内のアプリケーションを管理するために毎日使用されます.
このポストの目的は、あなたがKubernetesにあなたのアプリケーションを展開することができるように、パズルの連続配信(CD)の部分にどのようにボルトをかけることができるかを示すことです.しかし、我々があまりに遠くに着く前に、我々はパズルの重要な部分であるヘルムについて話す必要がありそうです.
どのような舵?
Helm calls itself "the package manager for Kubernetes". それはかなり正確な説明です.ヘルムは、多彩な、頑丈なツールのdevfsエンジニアは、設定ファイルを定義するために使用することができますし、我々のクラスタに一貫した展開を作成する変数の置換を実行し、異なる環境の異なる変数を持っている.
それは確かに我々がここでカバーしている問題への正しい解決です.
どうやってやるの?
最初に、いくつかの前提条件.あなたがプロジェクトを開始する前に、このすべてのハンマーを持っている必要があります.助けが必要な場合は以下の参考文献へのリンクがあります.
ファイルツリー
基本的に最後に、フォルダ/ファイルの構造は次のようになります.
<dir>
├── chart/
| ├── Chart.yaml
| ├── values.yaml
| └── templates/
| ├── deployment.yaml
| ├── service.yaml
| ├── ingress.yaml
| └── configmap.yaml
└── gitlab-ci.yml
値.ヤル
applicationName: my-first-app
certArn: your-certificate-arn
domain: your domain name
subnets: your subnets
securityGroups: your security groups
展開.ヤル
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.applicationName }}
namespace: {{ .Values.applicationName }}
spec:
replicas: 2
revisionHistoryLimit: 2
selector:
matchLabels:
app: {{ .Values.applicationName }}
template:
metadata:
labels:
app: {{ .Values.applicationName }}
spec:
containers:
- name: {{ .Values.applicationName }}
imagePullPolicy: Always
image: nginx:1.19.4
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html/index.html
name: nginx-conf
subPath: index.html
volumes:
- name: nginx-conf
configMap:
name: {{ .Values.applicationName }}-configmap
これは、配置を定義する設定ファイルです.いくつかの行があることがわかります{{ some text }}
. これは、グラフ内の値ファイルで定義する変数を使用する方法です.設定マップ.ヤル
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.applicationName }}-configmap
namespace: {{ .Values.applicationName }}
data:
index.html: |
<html>
<head>
<h1>My first Helm deployment!</h1>
</head>
<body>
<p>Thanks for checking out my first Helm deployment.</p>
</body>
</html>
この設定マップは、我々のアプリのために表示される単純なインデックスページを定義します.サービスヤル
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.applicationName }}
namespace: {{ .Values.applicationName }}
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: {{ .Values.applicationName }}
- port: 80
targetPort: 80
protocol: TCP
name: {{ .Values.applicationName }}
type: NodePort
selector:
app: {{ .Values.applicationName }}
インドレスヤル
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ .Values.applicationName }}
namespace: {{ .Values.applicationName }}
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/subnets: {{ .Values.subnets }}
alb.ingress.kubernetes.io/healthcheck-path: /
alb.ingress.kubernetes.io/security-groups: {{ .Values.securityGroups }}
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/certificate-arn: {{ .Values.certArn }}
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
spec:
rules:
- host: {{ .Values.applicationName }}.{{ .Values.domain }}
http:
paths:
- path: /*
backend:
serviceName: ssl-redirect
servicePort: use-annotation
- path: /*
backend:
serviceName: {{ .Values.applicationName }}
servicePort: 80
Gitlab CI気象研
stages:
- deploy
variables:
DOCKER_HOST: tcp://localhost:2375/
DOCKER_DRIVER: overlay2
APP_NAME: my-first-app
deploy:
stage: deploy
image: alpine/helm:3.2.1
script:
- helm upgrade ${APP_NAME} ./charts --install --values=./charts/values.yaml --namespace ${APP_NAME}
rules:
- if: $CI_COMMIT_BRANCH == 'master'
when: always
わかりました.今何?
さて、すべてのファイルが定義された後、あなたのインフラストラクチャは私たちの前提条件に従っています.
これらのファイルをコミットする場合、gitlabはあなたの
.gitlab-ci.yml
ファイルを生成し、パイプラインを開始する.我々のパイプラインは1つのステージと1つの仕事だけを持っています.を使用して展開のクラスタでコンテナをスピンしますhelm:3.2.1
イメージとランscript
コマンド.これは、我々の名前空間に必要なすべてのファイルを作成し、アプリケーションを起動すると、すべての重いリフティングを行います.あなたがRouter 53でDNS記録のように構成するならば
my-first-app.my-domain.com
Interessコントローラが作成したロードバランサへのAレコードで、ConfigMapで定義したインデックスページが表示されます.このポストは、我々の最初に現れましたblog 我々が書くところdevops and devops consulting services .
Reference
この問題について(KitlabとHelmによるKubernetes CI/CDパイプラインの構築), 我々は、より多くの情報をここで見つけました https://dev.to/danielslapelis/building-a-kubernetes-ci-cd-pipeline-with-gitlab-and-helm-km9テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol