【Kubernetesシリーズ】第7編CI/CDのコンポーネント配置
前言
敏捷な開発のニーズに対応して、CI(継続的な統合)/CD(継続的な交付)に対してより高い基準を提出し、今日はオープンソースコンポーネント(gitlab/jenkins/harbor/kubernetes)に基づいてCI/CDを使用し、チームの開発、運営をどのようにするかについて議論します.
コアコンポーネント
基本プロセス GitLabで対応するアイテムを作成します. 開発者はコードをGitLabに提出した. Jenkinsは、プロジェクトのGitアドレスとKubernetesクラスタを統合する対応するタスク(Job)を作成します. 構成フックがあれば、PushコードをプッシュするとJenkins構築が自動的にトリガーされ、フックが構成されていない場合は手動で構築する必要があります. Jenkins制御Kubernetes(Kubernetesプラグインを使用)Jenkins Slaveを作成します. Jenkins Slaveは、パイプライン(Pipeline)定義の手順に従って構築を実行する. コードのチェックアウト、パッケージング、コンパイル. は、Dockerfileによってミラーを生成する. は、ミラーをプライベートHarborに送信する. Jenkinsは、Kubernetesの最新のミラー配置を再制御します.
__注_:は上述したように一般的なステップであり、途中で自動化テストなどのステップが含まれ、自分でビジネスシーンに基づいて追加することができる. 上のパイプラインステップは、一般的にアプリケーションコードライブラリのルートディレクトリの下Jenkinsfileによって決定され、Jenkinsは自動的にファイルを読み出す.また、特定のアプリケーションラインを強力に管理する必要がある場合は、jenkinsfileテンプレートを独立して管理し、jenkins APIインタフェースに基づいてすぐにラインを生成することができます. デフォルトで使用されるDockerfileは、コードウェアハウスのルートディレクトリの下に配置されます.
コンポーネントの配置 kubernetes第3編Kubernetesクラスタインストール配置 gitlab无忌过招:手を握って自分のGitLab库 を建てることを教えます harborインストール構成ガイド jenkins
_注意:本文は主にjenkinsの配置と配置を説明して、その他のコンポーネントはもしあなたが配置して問題があるならば、伝言を歓迎します.
Jenkinsの導入と構成
_説明_以下のyamlファイルはすべてk 8 s masterノードの/home/jenkins_deployディレクトリの下、 導入例のdepployment.yamlの注記 例におけるjenkinsのディレクトリ 使用しているjenkins-masterのベースミラーリングはパブリックネットワークから来ているため、k 8 s masteノードが外部ネットワークにアクセスできるか、
配置例のingress.yamlの注記 は、オフィスネットワーク(クラスタ外)へのアクセスも必要です.
1.yamlの導入準備 deployment.yaml service,servicesを構成する.yaml jenkinsのk 8 sへのアクセスrbacを許可する.yaml オフィスネットワーク(クラスタ外)へのアクセスを容易にするために、ingress.yaml
2.yamlを適用しjenkinsを配置する
3.jenkinsサービスステータスの確認
4.jenkinsインストールプラグイン、設定へのアクセス
注意:ステップ1で宣言されたドメイン名
1.kubernetes/kubernetes cliプラグインもインストールされていることを確認
_操作ガイド_:【Manage Jenkins】 -> 【Manage Plugins】
似たような命令でjenkins-masterのパスワードを取得できるはずです
2.Kubernetesプラグインの構成
_操作ガイド_:【Manage Jenkins】->【Configure System】
図の寸法:あなたの環境に対応するk 8 s master に変更してください.宣言jenkins-agentのコマンド空間は、必要に応じて調整することもできる. jenkins-masterのアクセスアドレスです.この例ではservice-nameの形式でアクセスします. は、k 8 s共有群との接続状況をテストする.『Connection test successful』を手に入れたら、おめでとうございます. Kubernetes Pod Template の構成
図の寸法:ベースのjenkins-agentミラーを設定します. 作業ディレクトリを指定します. ダウンロード、エクスポート、キャッシュ構築が必要な場合は、共有ストレージのディレクトリを指定すると意味があります.
ディレクトリマウントの設定 ステップ2のように、ホストのディレクトリまたはネットワークストレージをjenkins-agentにマウントできます.
敏捷な開発のニーズに対応して、CI(継続的な統合)/CD(継続的な交付)に対してより高い基準を提出し、今日はオープンソースコンポーネント(gitlab/jenkins/harbor/kubernetes)に基づいてCI/CDを使用し、チームの開発、運営をどのようにするかについて議論します.
コアコンポーネント
基本プロセス
__注_:
コンポーネントの配置
_注意:本文は主にjenkinsの配置と配置を説明して、その他のコンポーネントはもしあなたが配置して問題があるならば、伝言を歓迎します.
Jenkinsの導入と構成
_説明_
nodeName ipaddress
、ipaddress有効なipであることを確認してください./var/jenkins_home
は、host_に直接マウントされるpath、条件があれば共有ストレージに置き換えることをお勧めします.jenkins/jenkins:lts-alpine
を自分のイントラネットワークミラーウェアハウスにプッシュすることができます.jenkins.dev.hanker.net
を有効なドメイン名アドレスに変更するか、NodePort
の形式でサービスを宣言することで、ip:port
の形式でjenkinsに直接アクセスすることができます.1.yamlの導入準備
apiVersion: v1
kind: Namespace
metadata:
name: devops
# Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
namespace: devops
spec:
replicas: 1
revisionHistoryLimit: 3
template:
metadata:
labels:
app: jenkins
spec:
nodeName: 1.1.1.1
serviceAccountName: jenkins-admin
containers:
- image: jenkins/jenkins:lts-alpine
imagePullPolicy: IfNotPresent
name: jenkins
volumeMounts:
- name: jenkins-volume
mountPath: /var/jenkins_home
- name: jenkins-localtime
mountPath: /etc/localtime
env:
- name: JAVA_OPTS
value: '-Xms256m -Xmx1024m -Duser.timezone=Asia/Shanghai'
- name: TRY_UPGRADE_IF_NO_MARKER
value: 'true'
ports:
- name: http
containerPort: 8080
- name: agent
containerPort: 50000
resources:
requests:
cpu: 1000m
memory: 1Gi
limits:
cpu: 1200m
memory: 2Gi
volumes:
- name: jenkins-localtime
hostPath:
path: /etc/localtime
- name: jenkins-volume
hostPath:
path: /home/jenkins/jenkins_home
---
apiVersion: v1
kind: Service
metadata:
name: jenkins-service
namespace: devops
spec:
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 8080
- port: 50000
targetPort: 50000
name: agent
selector:
app: jenkins
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: jenkins
name: jenkins-admin
namespace: devops
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: jenkins-rbac
namespace: devops
rules:
- apiGroups: ["","extensions","app"]
resources: ["pods","pods/exec","deployments","replicasets"]
verbs: ["get","list","watch","create","update","patch","delete"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: jenkins-admin
namespace: devops
labels:
k8s-app: jenkins
subjects:
- kind: ServiceAccount
name: jenkins-admin
namespace: devops
roleRef:
kind: ClusterRole
name: jenkins-rbac
apiGroup: rbac.authorization.k8s.io
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: jenkins-ingress
namespace: devops
spec:
rules:
- host: jenkins.dev.hanker.net
http:
paths:
- backend:
serviceName: jenkins-service
servicePort: 8080
path: /
2.yamlを適用しjenkinsを配置する
$ pwd
$ /home/jenkins_deploy
$ kubectl apply -f *.yaml
3.jenkinsサービスステータスの確認
[root@node0 jenkins_deploy]# kubectl -n devops get deployment jenkins
NAME READY UP-TO-DATE AVAILABLE AGE
jenkins 1/1 1 1 51d
[root@node0 jenkins_deploy]#
4.jenkinsインストールプラグイン、設定へのアクセス
注意:ステップ1で宣言されたドメイン名
jenkins.dev.hanker.net
はingressに解析されているため、直接アクセスできます.カスタムドメイン名でjenkinsにアクセスしたい場合は、正しいingressサービスノードに解析してください.1.kubernetes/kubernetes cliプラグインもインストールされていることを確認
_操作ガイド_:【Manage Jenkins】 -> 【Manage Plugins】
似たような命令でjenkins-masterのパスワードを取得できるはずです
$ kubectl -n devops exec jenkins-pod-name cat /var/jenkins_home/secrets/initialAdminPassword
2.Kubernetesプラグインの構成
_操作ガイド_:【Manage Jenkins】->【Configure System】
図の寸法:
図の寸法: