web-dev-qa-db-ja.com

Jenkinskubernetesプラグインが機能しない

Jenkins-kubernetesプラグインを使用してJenkinsDynamicスレーブの作成をセットアップしようとしています。

私のjenkinsはK8sクラスターの外部で実行されています。

リンク: https://github.com/jenkinsci/kubernetes-plugin

私のジェンキンスのバージョンは2.60.2で、Kubernetesプラグインのバージョンは1.1.2

Readmeに記載されている手順に従い、接続を正常にセットアップしました。

私の設定は次のようになります: enter image description here

そして、接続は成功します。

次に、ポッドテンプレートを使用してジョブを作成しました: enter image description here

ここから問題が始まります:1。このジョブを最初に実行すると、実行され、ポッド内のjenkinsスレーブコンテナが接続できず、スローされます:

enter image description here

JNLPポート(50000)を有効にしましたが、Jenkinsでランダムオプションを使用してテストしても、それが正しいポートであるかどうかはわかりません。何も機能しませんでした。

2。今、私はこのjenkinsジョブを破棄し、再実行すると次のようになります:

 Started by user Vaibhav Jain
[Pipeline] podTemplate
[Pipeline] {
[Pipeline] node
Still waiting to schedule task
Jenkins doesn’t have label defaultlabel

kubernetesではポッドが開始されていません。 これは奇妙です

何が間違っているのかわかりません。助けが必要!

6
Vaibhav Jain

証明書を使用する代わりに、serviceAccountを作成して、kubernetesで認証情報を使用することをお勧めします。

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: jenkins
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/log"]
  verbs: ["get","list","watch"]
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: jenkins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: jenkins
subjects:
- kind: ServiceAccount
  name: jenkins

そのserviceAccountを使用してjenkinsをデプロイします。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: jenkins
  name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:           
      serviceAccountName: jenkins 
....

Kubernetesプラグインのスクリーンショットを表示します(JNLPポートのJenkinsトンネルに注意してください。「jenkins」は私のkubernetesサービスの名前です)。

enter image description here

enter image description here

資格情報の場合:

enter image description here

次に、フィールドに入力します(IDは自動生成され、説明は資格情報リストボックスに表示されます)が、前に述べたように、必ずkubernetesでserviceAccountを作成してください。

enter image description here

私の指示は、kubernetes内のJenkinsマスター向けです。クラスターの外部(ただしスレーブは内部)で必要な場合は、単純なログイン/パスワード資格情報を使用する必要があると思います。

最後のエラーに関しては、ホスト解決エラーのようです。スレーブはホストを解決できません。

お役に立てば幸いです。

11
Nicola Ben

OK!問題が見つかりました。コンテナの上限を10(デフォルトの名前空間)として指定していますが、これはクラスタには低すぎます。 15個のワーカーノードクラスターがあり、K8sマスターがポッドを開始しようとすると、一度に複数のポッドを開始し(ただし、スケジュールされた後に残りのポッドを終了します)、最終的にコンテナーの上限(10)を超えます。 CAPを100に変更しましたが、期待どおりに機能しています。

K8s Jenkinsプラグインで気付いたのは、エラーコンテナー自体がクリアされないため、コンテナー数が増えてこの問題が発生することです。

1
Vaibhav Jain