Jenkins-kubernetesプラグインを使用してJenkinsDynamicスレーブの作成をセットアップしようとしています。
私のjenkinsはK8sクラスターの外部で実行されています。
リンク: https://github.com/jenkinsci/kubernetes-plugin
私のジェンキンスのバージョンは2.60.2で、Kubernetesプラグインのバージョンは1.1.2
Readmeに記載されている手順に従い、接続を正常にセットアップしました。
そして、接続は成功します。
ここから問題が始まります:1。このジョブを最初に実行すると、実行され、ポッド内のjenkinsスレーブコンテナが接続できず、スローされます:
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ではポッドが開始されていません。 これは奇妙です。
何が間違っているのかわかりません。助けが必要!
証明書を使用する代わりに、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サービスの名前です)。
資格情報の場合:
次に、フィールドに入力します(IDは自動生成され、説明は資格情報リストボックスに表示されます)が、前に述べたように、必ずkubernetesでserviceAccountを作成してください。
私の指示は、kubernetes内のJenkinsマスター向けです。クラスターの外部(ただしスレーブは内部)で必要な場合は、単純なログイン/パスワード資格情報を使用する必要があると思います。
最後のエラーに関しては、ホスト解決エラーのようです。スレーブはホストを解決できません。
お役に立てば幸いです。
OK!問題が見つかりました。コンテナの上限を10(デフォルトの名前空間)として指定していますが、これはクラスタには低すぎます。 15個のワーカーノードクラスターがあり、K8sマスターがポッドを開始しようとすると、一度に複数のポッドを開始し(ただし、スケジュールされた後に残りのポッドを終了します)、最終的にコンテナーの上限(10)を超えます。 CAPを100に変更しましたが、期待どおりに機能しています。
K8s Jenkinsプラグインで気付いたのは、エラーコンテナー自体がクリアされないため、コンテナー数が増えてこの問題が発生することです。