【问题标题】:How does k8s cluster behave when accessed from its pod using kubectl?使用 kubectl 从其 pod 访问时,k8s 集群的行为如何?
【发布时间】: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


    【解决方案1】:

    您可能在 Jenkins pod 的 kubectl 中默认配置了不同的命名空间。可以通过以下命令查看。

    kubectl config view | grep namespace
    

    要将默认命名空间更改为`default,可以运行以下命令。

    kubectl config set-context --current --namespace=default
    

    更多详情请查看here

    【讨论】:

    • 感谢您的快速回复,我尝试运行此kubectl config view | grep namespace 但什么也没得到,因为我从主机复制的配置文件没有任何默认命名空间仍然不明白为什么会这样该命名空间上的默认值 devops-cicd 用于创建 jenkins 部署,而不是 default
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2022-08-13
    • 2022-07-10
    • 2019-02-24
    • 2021-11-19
    • 1970-01-01
    • 2019-09-25
    相关资源
    最近更新 更多