GNU/Linux >> Linux の 問題 >  >> Linux

KubernetesにJenkinsをインストールする方法

はじめに

Jenkinsは継続的インテグレーションです ソフトウェア開発プロセスの大部分を自動化するツール。複雑なマイクロサービス環境で複数のプロジェクトに取り組んでいる複数の開発チームは、限られたリソースに負担をかける可能性があります。 Jenkinsは、完璧な最終製品をスケジュールどおりに納品するお手伝いをします。

Kubernetesクラスターは、Jenkinsに新しい自動化レイヤーを追加します。 Kubernetesは、リソースが効果的に使用され、サーバーと基盤となるインフラストラクチャが過負荷にならないようにします。

このチュートリアルでは、KubernetesクラスターにJenkinsをインストールする方法を説明します。

前提条件

  • コマンドライン/ターミナルへのアクセス
  • Kubernetesクラスター
  • ローカルマシンで完全に構成されたkubectlコマンドラインツール

KubernetesクラスターへのJenkinsのインストール

コンテナのデプロイを調整するKubernetesの機能により、Jenkinsは常に適切な量のリソースを利用できます。以下の例は、YAMLファイルのセットを使用してKubernetesクラスターにJenkinsをインストールする方法を示しています。 。 YAMLファイルは簡単に追跡、編集でき、無期限に再利用できます。

Jenkinsデプロイメントの名前空間を作成する

個別の名前空間は、分離の追加レイヤーを提供し、継続的インテグレーション環境をより詳細に制御します。ターミナルで次のコマンドを入力して、Jenkinsデプロイメントの名前空間を作成します。

kubectl create namespace jenkins

名前空間の名前は、DNS互換のラベルである必要があります。この例では、 jenkinsという名前を使用しています。

次のコマンドを使用して、既存のネームスペースを一覧表示します。

kubectl get namespaces

出力は、 jenkins 名前空間が正常に作成されました。

サービスアカウントを作成する

サービスアカウントは、ポッドプロセスを制御するために使用されるIDを提供します。テキストエディタを使用して、サービスアカウント宣言を保存するYAMLファイルを作成します。

nano sa-jenkins.yaml

このファイルは、管理者権限を持つクラスターの役割を定義します。また、 adminという名前の新しいサービスアカウントを作成します 以前に定義したクラスターの役割とバインドします。

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: admin
rules:
  - apiGroups: [""]
    resources: ["*"]
    verbs: ["*"]

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: jenkins

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: admin
subjects:
- kind: ServiceAccount
  name: admin
  namespace: jenkins

ファイルを保存して終了します。 kubectl applyを使用して構成を適用します

kubectl apply -f sa-jenkins.yaml

Jenkins永続ボリュームと永続ボリュームクレームの作成

永続ボリュームの役割は、基本的なJenkinsデータを保存し、ポッドの存続期間を超えて保存することです。デプロイのストレージ関連コンポーネントを定義するYAMLファイルを作成します:

nano volume-jenkins.yaml

最初のセクションで、ファイルは local-storageを宣言します ストレージクラス。 2番目のセクションでは、 jenkins-pvを定義します 永続ボリューム、3番目は永続ボリュームクレームを作成します jenkins-pvc これはjenkins-pvにバインドされます 音量。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv
  labels:
    type: local
spec:
  storageClassName: local-storage
  claimRef:
    name: jenkins-pvc
    namespace: jenkins
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  local:
    path: /mnt
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pvc
  namespace: jenkins
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

ファイルを保存して終了します。次に、ファイルを適用します。

kubectl apply -f volume-jenkins.yaml

Jenkinsデプロイメントファイルを作成して適用する

Jenkinsのデプロイ情報を保存するYAMLファイルを作成します。

nano deploy-jenkins.yaml

この例のデプロイメントファイルは、 jenkins / jenkins:ltsを利用しています。 Dockerイメージと1つのレプリカを作成します ポート8080で公開されます 。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins-server
  template:
    metadata:
      labels:
        app: jenkins-server
    spec:
      securityContext:
            fsGroup: 1000 
            runAsUser: 1000
      serviceAccountName: admin
      containers:
        - name: jenkins
          image: jenkins/jenkins:lts
          resources:
            limits:
              memory: "2Gi"
              cpu: "1000m"
            requests:
              memory: "500Mi"
              cpu: "500m"
          ports:
            - name: httpport
              containerPort: 8080
            - name: jnlpport
              containerPort: 50000
          livenessProbe:
            httpGet:
              path: "/login"
              port: 8080
            initialDelaySeconds: 90
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 5
          readinessProbe:
            httpGet:
              path: "/login"
              port: 8080
            initialDelaySeconds: 60
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 3
          volumeMounts:
            - name: jenkins-data
              mountPath: /var/jenkins_home         
      volumes:
        - name: jenkins-data
          persistentVolumeClaim:
              claimName: jenkins-pvc

volumeMounts ファイルのセクションは、前の手順で作成された永続ボリュームをマウントします。 livenessProbe およびreadinessProbe セクションは、失敗したポッドを再起動し、ポッドの準備ができたことを検出するプローブを宣言します。

ファイルを終了し、変更を保存します。新しく作成したファイルを使用してJenkinsをデプロイします:

kubectl apply -f deploy-jenkins.yaml

Jenkinsサービスファイルを作成して適用する

Kubernetesサービスは、Jenkinsをより広いネットワークに公開する抽象化です。これにより、クラスター内で行われている変更に関係なく、ポッドへの永続的な接続を維持できます。

サービスを定義するYAMLファイルを作成します:

nano service-jenkins.yaml

次のコンテンツを追加します:

apiVersion: v1
kind: Service
metadata:
  name: jenkins-svc
  namespace: jenkins
  annotations:
      prometheus.io/scrape: 'true'
      prometheus.io/path:   /
      prometheus.io/port:   '8080'
spec:
  selector: 
    app: jenkins-server
  type: NodePort  
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 44000

ファイルを保存して終了します。次に、次のように入力してサービスを作成します。

kubectl apply -f jenkins-service.yaml

これで、Jenkinsダッシュボードにアクセスできます。

Jenkinsダッシュボードにアクセス

Jenkinsの起動に進む前に、デプロイしたすべてのコンポーネントが意図したとおりに機能しているかどうかを確認してください。 kubectl get allを使用します コマンドを実行し、正しい名前空間を指定します:

kubect get all -n jenkins

この例は、適切に機能するデプロイメントを示しています。

  • ポッドはREADYとしてマークされています およびRunning
  • サービスのクラスターIPとポートが正常に割り当てられました。
  • デプロイメントはREADYとしてマークされます およびAVAILABLE
  • 必要なレプリカ数(1)に達しました。

ブラウザに移動し、IPアドレスとサービスファイルで定義したポートを使用してノードにアクセスします。ノードのIPアドレスがわからない場合は、次のコマンドの出力で見つけてください。

kubectl get nodes -o yaml

ノードのIPアドレスはstatusにあります 出力のセクション。

例の情報を使用すると、Jenkinsダッシュボードのアドレスは次のようになります。

http://192.168.49.2:44000

Jenkinsにアクセスするには、最初にクレデンシャルを入力する必要があります。新規インストールのデフォルトのユーザー名はadminです 。

パスワードを取得するには:

1. kubectl get allの出力でポッドの名前を見つけます 上記のコマンド。

2.ポッドの名前を見つけたら、それを使用してポッドのログにアクセスします。

kubectl logs jenkins-56c9d59dc-pv8kc --namespace jenkins

3.ログの最後にある長い英数字の文字列としてフォーマットされたパスワードを見つけます。

これで、JenkinsがKubernetesクラスターに正常にインストールされ、それを使用して新しい効率的な開発パイプラインを作成できます。


Linux
  1. LinuxにJenkinsをインストールする方法

  2. Ubuntu16.04にJenkinsをインストールする方法

  3. Ubuntu20.04にJenkinsをインストールする方法

  1. CentOS8にJenkinsをインストールする方法

  2. Ubuntu18.04にKubernetesをインストールする方法

  3. Ubuntu18.04にJenkinsをインストールする方法

  1. Ubuntu20.04にJenkinsをインストールする方法

  2. CentOS7にJenkinsをインストールする方法

  3. CentOS8にJenkinsをインストールする方法