标签: kubernetes-pod

我们可以在Kubernetes的Pod中使用相同种类的多个容器吗?

例如,我可以跟随yaml生成具有多个容器的pod:

apiVersion: v1
kind: Pod
metadata:
name: lampapp
labels:
    app: app
spec:
  containers:
  - name: lampdb
    image: mysql_test
  - name: app
    image: php-app-db-url-env
    env:
     - name: DB_URL
      value: 127.0.0.1:3306
  - name: app2
    image: php-app-db-url-env
    env:
    - name: DB_URL
      value: 127.0.0.1:3306
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-pod kubernetes-container

6
推荐指数
1
解决办法
2141
查看次数

从Pod连接到其他Pod

基本上,我有一个Deployment,它创建3个可自动缩放的容器:PHP-FPM,NGINX和包含应用程序的容器,所有这些容器都设置有机密,服务和入口。该应用程序还在PHP-FPM和NGINX之间共享该项目,因此已全部完成。

由于我想使用K8s进行更多探索,因此我决定使用Redis创建一个Pod,该Pod还可以安装永久性磁盘(但这并不重要)。我还为redis创建了一个服务,如果我通过SSH进入Redis容器并运行,则一切工作都很好redis-cli

有趣的是,该项目无法连接到Redis所在的Pod。我了解,各个Pod之间的容器共享相同的“本地”网络,可以使用进行访问localhost

如何将我的项目连接到在其他Pod中运行,可独立扩展的Redis服务器?Redis服务出了什么问题?


我的Redis服务是这样的:

apiVersion: v1
kind: Service
metadata:
  name: redis-service
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis
Run Code Online (Sandbox Code Playgroud)

我的Redis Pod由部署配置文件提供支持(我不一定会对其进行扩展,但我会期待它):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  labels:
    app: redis
spec:
  selector:
    matchLabels:
      app: redis
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: redis
    spec:
      volumes:
        - name: redis-persistent-volume
          persistentVolumeClaim:
            claimName: redis-pvc
      containers:
        - image: redis:4.0.11
          command: ['redis-server']
          name: redis
          imagePullPolicy: Always
          resources:
            limits:
              cpu: 250m
              memory: 512Mi
            requests:
              cpu: 250m
              memory: 512Mi …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-pod

6
推荐指数
2
解决办法
5711
查看次数

在 kubernetes 部署中设置 securityContext

我在部署中使用了 nfs 挂载卷。我需要给它 fsGroup 如下所示:

securityContext:
  runAsUser: 1000
  runAsGroup: 3000
  fsGroup: 2000
Run Code Online (Sandbox Code Playgroud)

有没有办法在部署清单上做到这一点?正如我在文档中看到的,我只能在 pod yaml 中设置安全上下文。

kubernetes kubernetes-security kubernetes-deployment kubernetes-pod

6
推荐指数
1
解决办法
6100
查看次数

从 docker 容器到 kubernetes pod 的端口发布是如何工作的?

在学习入门教程,第 3 部分:部署到 Kubernetes 时,我偶然发现了清单文件部署定义中的 Pod 模板。在 pod 和容器部分都没有指定端口。

这让我想到了我最初的问题:从 docker 容器到 pod 的端口发布是如何工作的?

以下引用听起来像是 kubernetes 在启动后深入了解正在运行的容器,并从侦听 0.0.0.0:PORT 的服务获取端口,并将其映射到 pod 环境(网络命名空间)中的相同端口。

在此处不指定端口不会阻止该端口被公开。任何侦听容器内默认“0.0.0.0”地址的端口都可以从网络访问。来源

如果我的假设朝着正确的方向发展,这对于具有多个容器的 Pod 意味着什么?kubernetes 是否只允许具有内部服务侦听不同端口的容器?或者是否可以将容器内部端口映射到 pod 环境(网络命名空间)中的不同端口?

根据以下引用,我假设从容器到 pod 的端口映射是不可能的。实际上,在具有相同端口的两个容器中指定两个服务并没有太大意义,只是通过紧随其后的映射来更改它们。

在此处公开端口可为系统提供有关容器使用的网络连接的附加信息,但主要是信息性的。来源


更新 2019-10-15

如以下引述所述,默认情况下,docker 容器不会向外界发布任何端口。

默认情况下,当您创建容器时,它不会将其任何端口发布到外部世界。要使端口可用于 Docker 外部的服务或未连接到容器网络的 Docker 容器,请使用 --publish 或 -p 标志。来源

这意味着 kubernetes 必须以某种方式配置在 pod 中运行的 docker 容器,以便将容器的端口发布到 pod。

关于以下引用,kubernetes 是否有可能通过使用--network 主机配置来运行 docker 容器?假设 pod 是 kubernetes 中的 docker 主机。

如果您对容器使用主机网络模式,则该容器的网络堆栈不会与 Docker 主机隔离 [...] 例如,如果您运行绑定到端口 80 的容器并使用主机网络,则该容器的应用程序是在主机 …

docker kubernetes docker-container kubernetes-pod

6
推荐指数
1
解决办法
1391
查看次数

kubernetes中的Label和Selector有什么区别?

看了kubernetes.io上的官方文档,我还是想知道 Kubernetes 中 label 和 selector 到底有什么区别?

编辑:例如考虑以下 Kubernetes 对象,以下 yaml 文件的 Labels 和 Selectors 有什么区别。

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: label-demo
  labels:
    environment: production
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: App1
  template:
    metadata:
      labels:
        environment: production
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.7.9
Run Code Online (Sandbox Code Playgroud)

kubernetes devops kubernetes-pod

6
推荐指数
2
解决办法
3571
查看次数

Kubectl 等待 statefulset 的一个 pod 准备就绪?

要等待某个 pod 完成,命令是

kubectl wait --for=condition=Ready pod/pod-name

同样,我想等待 statefulset 中的任何一个 pod 准备就绪。我试过下面的命令没有用,

kubectl wait --for=condition=Ready statefulset/statefulset-name

命令选项应该是什么样的?

kubernetes kubectl kubernetes-statefulset kubernetes-pod

6
推荐指数
2
解决办法
2637
查看次数

错误:src 或 dest 之一必须是远程文件规范

我正在尝试通过以下命令将本地文件夹移动到 kubernetes 卷中:

kubectl cp /* mynamespace/mypod-xxxx-xxxx:/var/www/my-content
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到以下错误消息:

错误:src 或 dest 之一必须是远程文件规范

即使我已经配置卷安装如下:

      volumeMounts:
        - mountPath: "/var/www/my-content"
          name: mycontent
  volumes:
    - name: mycontent
      persistentVolumeClaim:
        claimName: mypvc
Run Code Online (Sandbox Code Playgroud)

请让我知道我错过了哪些配置。

kubernetes kubectl kubernetes-pod

6
推荐指数
1
解决办法
1万
查看次数

同一集群中的 Kubernetes Pod 之间的连接被拒绝

我是 Kubernetes 新手,正在致力于在新的 Kubernetes 集群中部署应用程序。

目前,运行的服务有多个Pod需要相互通信。我正在寻找一种通用方法来调试问题,而不是进入服务的详细信息,因为问题会变得过于具体。

集群内的 Pod 抛出错误: err="Get \"http://testpod.mynamespace.svc.cluster.local:8080/": dial tcp 10.10.80.100:8080: connect: connection refused" 两个 Pod 位于同一集群中。

调试此问题的最佳步骤是什么?

我尝试运行: kubectl exec -it testpod --namespace mynamespace -- cat /etc/resolv.conf 这返回: search mynamespace.svc.cluster.local svc.cluster.local cluster.local us-east-2.compute.internal 我在这里找到的: https: //kubernetes.io/docs/concepts/services-networking/dns-pod-service/

kubernetes kubernetes-pod

6
推荐指数
1
解决办法
2万
查看次数

Kubernetes 如何在 wsl2 支持的环境中正确挂载 Windows 路径

我有一个可以正常运行的本地图像: docker run -p 8080:8080 -v C:\Users\moritz\Downloads\1\imageService\examples1:/images -v C:\Users\moritz\entwicklung\projekte\imageCluster\logs:/logs imageservice

现在我希望它作为 Kubernetes(使用 Docker-for-Windows v1.19.7 内置的)部署运行:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: image-service
spec:
  selector:
    matchLabels:
      app: image-service
  template:
    metadata:
      labels:
        app: image-service
    spec:
      containers:
      - name: image-service
        image: "imageservice"
        resources:
          limits:
            cpu: "0.9"
            memory: "1Gi"
        ports:
        - name: http
          containerPort: 8080
        volumeMounts:
          - mountPath: /images
            name: image-volume
          - mountPath: /logs
            name: log-volume  
      volumes:
        - name: image-volume
          hostPath:
            path: "c:\\Users\\moritz\\Downloads\\1\\imageService\\examples1"
            type: Directory
        - name: log-volume
          hostPath:
            path: /mnt/c/Users/moritz/entwicklung/projekte/imageCluster/logs
            type: Directory
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我尝试了不同的方法在 …

windows kubernetes kubernetes-pod

6
推荐指数
1
解决办法
1797
查看次数

Prometheus Pod 因错误“打开存储失败”而崩溃

我重新启动了 Prometheus pod,现在 Prometheus pod 正在崩溃。在日志中发现这个错误:

level=error ts=2021-06-09T09:27:29.066Z caller=main.go:758 err="opening storage failed: block dir: \"/prometheus/01F6J0P4KBBWVJD2M8B1PE7C5E\": open /prometheus/01F6J0P4KBBWVJD2M8B1PE7C5E/meta.json: no such file or directory"
Run Code Online (Sandbox Code Playgroud)

注意到该01F6J0P4KBBWVJD2M8B1PE7C5E文件夹​​中只有 chunks 文件夹。

知道为什么会发生这种情况吗?有没有办法解决这个问题?

kubernetes prometheus kubernetes-helm prometheus-operator kubernetes-pod

6
推荐指数
1
解决办法
6799
查看次数