【发布时间】:2022-02-17 16:36:00
【问题描述】:
我正在与 jenkins 合作一个项目,我已经在运行 jenkins pod,并希望直接从 pod 运行 kubectl 命令以连接我的主机,以便做到这一点,我在 windows 上遵循了这个SO question about k8s cluster remote accessam在我从主机 k8s 运行的 jenkins pod 上安装了 kubectl v1.23.3。
我设法验证运行 kubectl 在 jenkins pod(容器)上正常工作:
kubectl create deployment nginx --image=nginx
kubectl create service nodeport nginx --tcp=80:80
当我从 jenkins 容器中运行 kubectl get all 时,我得到以下输出:
root@jenkins-64756886f7-2v92n:~/test# kubectl create deployment nginx --image=nginx
kubectl create service nodeport nginx --tcp=80:80
deployment.apps/nginx created
service/nginx created
root@jenkins-64756886f7-2v92n:~/test# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/jenkins-64756886f7-2v92n 1/1 Running 0 37m
pod/nginx-6799fc88d8-kxprv 1/1 Running 0 8s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/jenkins-service NodePort 10.110.105.78 <none> 8080:30090/TCP 39m
service/nginx NodePort 10.107.115.5 <none> 80:32355/TCP 8s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/jenkins 1/1 1 1 39m
deployment.apps/nginx 1/1 1 1 8s
NAME DESIRED CURRENT READY AGE
replicaset.apps/jenkins-64756886f7 1 1 1 37m
replicaset.apps/nginx-6799fc88d8 1 1 1 8s
root@jenkins-64756886f7-2v92n:~/test#
最初,我将 Jenkins 部署附加到名为
devops-cicd的命名空间 在我的浏览器上测试了部署并运行良好
这是我主机的输出:
PS C:\Users\affes> kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d9h
当我指定命名空间时,我得到与 Jenkins 容器相同的结果:
PS C:\Users\affes> kubectl get all -n devops-cicd
NAME READY STATUS RESTARTS AGE
pod/jenkins-64756886f7-2v92n 1/1 Running 0 38m
pod/nginx-6799fc88d8-kxprv 1/1 Running 0 93s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/jenkins-service NodePort 10.110.105.78 <none> 8080:30090/TCP 41m
service/nginx NodePort 10.107.115.5 <none> 80:32355/TCP 93s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/jenkins 1/1 1 1 41m
deployment.apps/nginx 1/1 1 1 93s
NAME DESIRED CURRENT READY AGE
replicaset.apps/jenkins-64756886f7 1 1 1 38m
replicaset.apps/nginx-6799fc88d8 1 1 1 93s
我不知道是什么导致了直接在该命名空间上创建的资源,甚至没有指定命名空间,有没有一种可能的方法来配置一些东西,让我可以部署在默认命名空间上?
这是我的部署清单:
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
namespace: devops-cicd
spec:
selector:
matchLabels:
app: jenkins
workload: cicd
replicas: 1
template:
metadata:
namespace: devops-cicd
labels:
app: jenkins
workload: cicd
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts
volumeMounts:
- name: dockersock
mountPath: "/var/run/docker.sock"
- name: docker
mountPath: "/usr/bin/docker"
securityContext:
privileged: true
runAsUser: 0 # Root
restartPolicy: Always
volumes:
- name: dockersock
hostPath:
path: /var/run/docker.sock
- name: docker
hostPath:
path: /usr/bin/docker
---
apiVersion: v1
kind: Service
metadata:
namespace: devops-cicd
name: jenkins-service
spec:
selector:
app: jenkins
workload: cicd
ports:
- name: http
port: 8080
nodePort: 30090
type: NodePort
【问题讨论】:
标签: jenkins kubernetes