2017-12-19 4 views
0

ビルドを実行するためにGKEでJenkinsイメージをホストしようとしています。大抵、私はGoogle's tutorial for setting up Jenkins in Kubernetesに続いた。ビルドを実行する1つのマスターノードで、かなり基本的な設定ができました。docker.sockの使用中にKubernetesでJenkinsをホスティングする

また、Jenkins環境内でDockerを使用できるようにするため、Jenkinsのグローバルツール設定に入り、Dockerインスタンスを追加しました。私はさらに、「unix:///var/run/docker.sockでDockerデーモンに接続できません.Dockerデーモンが実行されていますか?」を回避するために、展開ファイルにdocker.sockをマップしました。問題。

私の現在の展開は、次のようになります。

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: jenkins 
    namespace: jenkins 
spec: 
    replicas: 1 
    template: 
    metadata: 
     labels: 
     app: master 
    spec: 
     containers: 
     - name: master 
     image: jenkins/jenkins:2.95 
     ports: 
     - containerPort: 8080 
     - containerPort: 50000 
     readinessProbe: 
      httpGet: 
      path: /login 
      port: 8080 
      periodSeconds: 10 
      timeoutSeconds: 5 
      successThreshold: 2 
      failureThreshold: 5 
     env: 
     - name: JENKINS_OPTS 
      valueFrom: 
      secretKeyRef: 
       name: jenkins 
       key: options 
     - name: JAVA_OPTS 
      value: '-Xmx1400m' 
     volumeMounts: 
     - mountPath: /var/jenkins_home 
      name: jenkins-home 
     - mountPath: /var/run/docker.sock 
      name: docker-socket 
     securityContext: 
      privileged: true 
     resources: 
      limits: 
      cpu: 500m 
      memory: 1500Mi 
      requests: 
      cpu: 500m 
      memory: 1500Mi 
     volumes: 
     - name: jenkins-home 
     gcePersistentDisk: 
      pdName: jenkins-home 
      fsType: ext4 
      partition: 1 
     - name: docker-socket 
     hostPath: 
      path: /var/run/docker.sock 

残念ながら、いずれかが次のエラーで失敗構築します。このエラーを含む

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: 
.... 
dial unix /var/run/docker.sock: connect: permission denied 

ほとんどのGoogle検索はKubernetes-ように見えるしていないように見えます関連する

私には何が欠けていますか?

spec: 
    replicas: 1 
    template: 
    metadata: 
     labels: 
     app: master 
    spec: 
     securityContext: 
     runAsUser: 0 
     containers: 

基本的にrootとしてジェンキンスを実行します:

アップデート:私は、この設定を使用する場合は、ある程度までが、これは良い作品。残念ながら、これは、パイプラインが認証情報を管理する方法にいくつかの影響を与えます。 「withRepository(repoName、credentialId)」を使用しようとすると、パイプラインによって/var/jenkins_home/.dockercfgにエントリが追加されますが、後でドッキングするプッシュステップではこれらの資格情報が見つからないようです(後のステップでは/root/.dockercfgまたは/root/.docker/config.json)。

+0

Aha! "runAsUser 0"と別のsecurityContextを使用すると動作します。 – bcholmes

+1

私は、ジェンキンがジェンキンのユーザーによって実行されている場合、あなたはドッカーのグループにジェンキンのユーザーを追加することができます。ルートユーザーを使用する必要はありません。より適切で安全なものになるでしょう。 –

+0

ええ、悲しいことに、私はそれをどうやって行うのか分かりません。これはKubernetes環境でホストされているため、SSHをサーバーに追加してgroupaddを実行できるようなものではありません。しかし、おそらくそれは私が把握する必要があるものです。コメントありがとう! – bcholmes

答えて

2
volumes: 
- name: docker-sock-volume 
      hostPath: 
      path: /var/run/docker.sock 
      type: File 

タイプを指定してみてください:あなたは1000ユーザーとして実行しようとする場合があります

+0

提案していただきありがとうございます。私は、Kubernetes環境でDockerとJenkinsを使用し、その設定を手に入れるアプローチで、さまざまな問題に遭遇したことを認めているので、この提案をテストする場所にはまだありません。 – bcholmes

1

ファイル:

... 
spec: 
    ... 
    securityContext: 
    # Specify fsGroup for pod, so that the persistent volume is writable for the non-privileged uid/gid 1000 
    runAsUser: 1000 
    fsGroup: 1000 
    ... 

あなたはまたthis Helm chart役に立つかもしれませんが。

関連する問題