Python 3.x 如何从Python吊舱中访问kube apiserver?

Python 3.x 如何从Python吊舱中访问kube apiserver?,python-3.x,docker,kubernetes,Python 3.x,Docker,Kubernetes,我对Kuberenetes/Dockers非常陌生,并计划创建一个简单的Python pod 在集群上运行并以固定间隔(例如每天一次)映射集群节点和POD的 我计划使用Kubernetes Python客户端来实现这一点,该客户端可以轻松访问kube apiserver 我需要配置什么才能实现它?Kubernetes用户创建: [root@project1kubemaster stackoverflow]# cat samplepod.yaml apiVersion: v1 kind: Pod

我对Kuberenetes/Dockers非常陌生,并计划创建一个简单的Python pod 在集群上运行并以固定间隔(例如每天一次)映射集群节点和POD的

我计划使用Kubernetes Python客户端来实现这一点,该客户端可以轻松访问kube apiserver


我需要配置什么才能实现它?

Kubernetes用户创建:

[root@project1kubemaster stackoverflow]# cat samplepod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: samplepod
spec:
  containers:
  - image: prasasai/sample
    name: samplepod
  serviceAccountName: sampleuser
  • 创建服务帐户[从容器内访问kube apiserver]
  • 创建一个clusterrolebinding,将在步骤#1中创建的服务帐户链接到名为cluster admin的群集角色:
  • 创建python容器:

    [root@project1kubemaster stackoverflow]# cat samplepod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: samplepod
    spec:
      containers:
      - image: prasasai/sample
        name: samplepod
      serviceAccountName: sampleuser
    
  • 创建一个名为“requirements.txt”的文件,并在其中添加“kubernetes”:
  • 检查以下内容将IP地址更改为群集IP并将文件另存为program.py。修改以下两行
  • 构建并推送映像:
  • 编写Pod清单,运行并检查logd以查看输出:

    [root@project1kubemaster stackoverflow]# cat samplepod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: samplepod
    spec:
      containers:
      - image: prasasai/sample
        name: samplepod
      serviceAccountName: sampleuser
    
    为了满足您的要求(定期运行此pod),我们可以创建一个cronJob(一分钟后运行一次)

    [root@project1kubemasterstackoverflow]#kubectl应用-f samplecron.yaml
    cronjob.batch/sample-job已创建
    [root@project1kubemasterstackoverflow]#kubectl找工作
    名称计划挂起活动上一个计划期限
    示例作业*/1****错误0 8s
    [root@project1kubemasterstackoverflow]#kubectl找工作
    名称计划挂起活动上一个计划期限
    示例作业*/1****False 0 19s
    [root@project1kubemasterstackoverflow]#kubectl找工作
    名称计划挂起活动上一个计划期限
    示例作业*/1****错误1 25s 40s
    
    非常感谢您的详细回答。如果我想将结果写入某些AWS服务(如DynamoDB),它是否需要额外的配置?
    aToken =  open('/var/run/secrets/kubernetes.io/serviceaccount/token','r').read()
    aConfiguration.host = "https://<maternode IP>:6443"
    
    [root@project1kubemaster stackoverflow]# cat Dockerfile
    FROM python:alpine3.7
    WORKDIR /app
    COPY requirements.txt .
    COPY program.py
    RUN pip install -r requirements.txt
    CMD python ./program.py
    
    [root@project1kubemaster stackoverflow]# docker build -t sample .
    
    Sending build context to Docker daemon   46.8MB
    Step 1/6 : FROM python:alpine3.7
    alpine3.7: Pulling from library/python
    ...
    Successfully built e98cea8cb850
    Successfully tagged sample:latest
    
    [root@project1kubemaster stackoverflow]#docker image ls 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    sample              latest              e98cea8cb850        2 minutes ago       126MB
    python              alpine3.7           00be2573e9f7        21 months ago       81.3MB 
    
    [root@project1kubemaster stackoverflow]# docker tag e98cea8cb850 prasasai/sample
    
    [root@project1kubemaster stackoverflow]# docker push prasasai/sample
    The push refers to repository [docker.io/prasasai/sample]
    515f285319c0: Pushed 
    b39d02c0a6c7: Pushed 
    3c22209f875e: Pushed 
    2ea55fcfd611: Pushed 
    5fa31f02caa8: Mounted from library/python 
    88e61e328a3c: Mounted from library/python 
    9b77965e1d3f: Mounted from library/python 
    50f8b07e9421: Mounted from library/python 
    629164d914fc: Mounted from library/python 
    latest: digest: sha256:93c7317f966fa723e406932221f0f1563243eba603c79fba2e113362cc22b4d8 size: 2200
    
    [root@project1kubemaster stackoverflow]# cat samplepod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: samplepod
    spec:
      containers:
      - image: prasasai/sample
        name: samplepod
      serviceAccountName: sampleuser
    
    [root@project1kubemaster stackoverflow]# kubectl apply -f samplepod.yaml
    pod/samplepod created
    
    [root@project1kubemaster stackoverflow]# kubectl logs samplepod
    Listing pods with their IPs:
    192.168.67.65   default first-6fb86b947d-68zzz
    192.168.67.66   default first-6fb86b947d-74vtf
    192.168.121.1   default first-6fb86b947d-hb6l6
    192.168.121.2   default first-6fb86b947d-rlqk9
    192.168.67.67   default first-6fb86b947d-tdnbf
    192.168.121.6   default hello-bd5c66899-8dchl
    192.168.121.4   default hello-bd5c66899-9ssrc
    192.168.121.5   default hello-bd5c66899-pjk7k
    192.168.67.68   default hello-bd5c66899-pwpsm
    192.168.67.69   default hello-bd5c66899-whjdt
    192.168.121.7   default samplepod
    192.168.67.75   default test1
    
    [root@project1kubemaster stackoverflow]# cat samplecron.yaml
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: sample-job
    spec:
      jobTemplate:
        metadata:
          name: sample-job
        spec:
          template:
            metadata:
            spec:
              containers:
              - image: prasasai/sample
                name: sample-job
              serviceAccountName: sampleuser
              restartPolicy: OnFailure
      schedule: '*/1 * * * *'
    
    [root@project1kubemaster stackoverflow]# kubectl apply -f samplecron.yaml
    cronjob.batch/sample-job created
    
    [root@project1kubemaster stackoverflow]# kubectl get cronjobs
    NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    sample-job   */1 * * * *   False     0        <none>          8s
    
    [root@project1kubemaster stackoverflow]# kubectl get cronjobs
    NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    sample-job   */1 * * * *   False     0        <none>          19s
    
    [root@project1kubemaster stackoverflow]# kubectl get cronjobs
    NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    sample-job   */1 * * * *   False     1        25s             40s