标签: kubernetes-pod

Kubernetes存储在裸机/私有云上

我刚刚开始在2个私有云服务器上的2节点(master-minion)设置上使用Kubernetes.我已经安装了它,做了基本的配置,并让它运行从主人到仆从的一些简单的pod /服务.

我的问题是:

如果不使用Google Cloud,如何在pod中使用持久存储?

对于我的第一次测试,我运行了一个Ghost Blog pod,但如果我撕掉了pod,则更改将丢失.尝试向pod添加卷,但实际上无法找到有关如何在GC上执行操作的文档.

我的尝试:

apiVersion: v1beta1
id: ghost
kind: Pod
desiredState:
  manifest:
    version: v1beta1
    id: ghost
    containers:
      - name: ghost
        image: ghost
        volumeMounts:
          - name: ghost-persistent-storage
            mountPath: /var/lib/ghost
        ports:
          - hostPort: 8080
            containerPort: 2368
    volumes:
      - name: ghost-persistent-storage
        source:
          emptyDir: {}
Run Code Online (Sandbox Code Playgroud)

发现:在Kubernetes上持久安装MySQL和WordPress

无法弄清楚如何在我的测试安装中添加存储(NFS?).

storage persistent kubernetes kubernetes-pod

5
推荐指数
1
解决办法
3245
查看次数

具有集群 POD 的 Kubernetes 服务处于活动/备用状态

抱歉没有保持简短,因为任何这样的尝试都会让我错过我的问题的一些重要细节。

我有一个遗留 Java 应用程序,它在集群环境中以主动/备用模式工作,通过预定义的端口公开某些 RESTful Web 服务。

如果我的应用程序集群中有两个节点,那么在任何时候都只有一个节点处于主动模式,另一个处于被动模式,并且请求始终由运行在主动模式下的应用程序的节点提供。“主动”和“被动”只是角色,因此应用程序将在两个节点上运行。主动和被动实例通过相同的预定端口相互通信。

假设我有一个两节点集群,我的应用程序的一个实例在每个节点上运行,那么其中一个实例最初是主动的,另一个是被动的。如果由于某种原因主动节点因为某种原因而折腾,其他节点中的应用程序实例会使用某种心跳机制识别出这一点,接管控制权并成为新的主动节点。当旧的主动恢复时,它检测到另一个人已经拥有新的主动角色,因此它进入被动模式。

应用程序设法在同一端点 IP 上提供 RESTful web 服务,而不管哪个节点在“活动”模式下运行应用程序,通过使用集群 IP,它搭载在活动实例上,因此集群 IP 切换到任何节点在活动模式下运行应用程序。

我正在尝试将这个应用程序容器化并在 Kubernetes 集群中运行它,以实现扩展和易于部署。我能够容器化并将其部署为 Kubernetes 集群中的 POD。

为了在此处引入主动/被动角色,我正在运行此 POD 的两个实例,每个实例都使用节点关联固定到单独的 K8S 节点(每个节点被标记为主动或被动,POD 定义固定在这些标签上) ,并使用我的应用程序的集群机制将它们集群起来,而只有一个是主动的,另一个是被动的。

我通过使用 NodePort 使用 K8S 服务语义在外部公开 REST 服务,并通过主节点上的 NodePort 公开 REST WebService。

这是我的 yaml 文件内容:

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
  labels:
    app: myapp-service
spec:
  type: NodePort
  ports:
    - port: 8443
      nodePort: 30403
  selector:
    app: myapp

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: active
spec:
  replicas: 1
  template:
    metadata: …
Run Code Online (Sandbox Code Playgroud)

service kubernetes kubernetes-pod

5
推荐指数
1
解决办法
6895
查看次数

如何从 REST API 创建 Pod

如何使用 REST API 创建 Pod?

我查看了 Kubernetes API 文档:https ://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#-strong-write-operations-strong--54

他们正在写需要使用 POST 请求:
POST /api/v1/namespaces/{namespace}/pods

我有这个简单的 nginx pod 的 YAML:

cat > nginx-pod.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: nginx1
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
EOF
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-apiserver kubernetes-pod

5
推荐指数
2
解决办法
5394
查看次数

Kubernetes [RBAC]:有权访问特定 Pod 的用户

我需要向外部支持授予对命名空间内的一组 pod 的访问权限。我一直在阅读 RBAC API、[Cluster] 角色和 [Cluster] 角色绑定;但我找不到有关如何将角色应用于一组 pod(基于注释或标签)的任何信息。有谁知道是否有可能做到这一点?

这是我现在使用的角色,需要将其限制为特定的 pod 集:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: <ClientX>-PodMonitor
  namespace: <namespace>
rules:
- apiGroups: [""]
  verbs: ["get", "list"]
  resources: ["pods", "pods/log"]
Run Code Online (Sandbox Code Playgroud)

如果你们需要更多细节,请告诉我。

谢谢。

rbac kubernetes kubernetes-security kubernetes-pod

5
推荐指数
1
解决办法
1921
查看次数

Kubernetes / Rancher 2,带有本地存储卷部署的 mongo-replicaset

我尝试,我尝试,但 Rancher 2.1 无法部署“ mongo-replicaset ”目录应用程序,并配置了本地持久卷

如何使用本地存储卷正确部署 mongo-replicaset?由于我是 Rancher 2 的新手,因此任何调试技术都值得赞赏。

我遵循下面的 4 个 ABCD 步骤,但第一个 pod 部署永远不会结束。它有什么问题?日志和结果屏幕在最后。详细配置可以在这里找到。

注意:没有本地持久卷的部署成功

注意:使用本地持久卷和“mongo”映像部署成功(没有副本集版本)。

注意:同时使用 mongo-replicaset 和本地持久卷的部署失败


步骤 A - 集群

创建一个牧场主实例,然后:

  1. 添加三个节点:一个worker,一个worker etcd,一个worker控制平面
  2. 在每个节点上添加标签:为节点 Affinity 命名一、命名二和命名三

步骤 B - 存储类

使用以下参数创建存储类:

  1. volumeBindingMode : WaitForFirstConsumer看到这里
  2. 名称:本地存储

步骤 C - 持久卷

添加 3 个持久卷,如下所示:

  1. 类型:本地节点路径
  2. 接入方式:单节点RW,12Gi
  3. 存储类别:本地存储
  4. 节点亲和度:名称一(第二卷两个,第三卷三个)

步骤 D - Mongo-replicaset 部署

从目录中,选择 Mongo-replicaset 并像这样配置它:

  1. 副本集名称:rs0
  2. 持久卷.启用:真
  3. 持久卷大小:12Gi
  4. 持久卷.storageClass:本地存储

结果 …

mongodb kubernetes rancher persistent-volumes kubernetes-pod

5
推荐指数
1
解决办法
2382
查看次数

在kubernetes中自动缩放期间某些请求失败

我在microk8s上建立了一个k8s集群,并将应用程序移植到了它。我还添加了一个水平自动缩放器,它根据cpu负载添加了pod。自动缩放器工作正常,当负载超出目标时,它会添加豆荚;当一段时间后我卸下负载时,它将杀死豆荚。

问题出在自动缩放器正在创建新容器的同一时刻,我注意到一些请求失败:

POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  200
POST Response Code :  502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code :  502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code :  200
POST Response Code :  502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code …
Run Code Online (Sandbox Code Playgroud)

horizontal-scaling autoscaling kubernetes kubernetes-pod

5
推荐指数
1
解决办法
119
查看次数

为什么 ReadWriteOnce 在不同的节点上工作?

我们在 K8s 上运行的平台有不同的组件。我们需要在其中两个组件(comp-A 和 comp-B)之间共享存储,但我们错误地为此定义了 PV 和 PVC ReadWriteOnce,即使这两个组件在不同的节点上运行,一切正常,我们能够从两个组件读取和写入存储。

根据 K8s 文档,ReadWriteOnce可以挂载到一个节点,我们必须使用ReadWriteMany

  • ReadWriteOnce -- 卷可以由单个节点以读写方式挂载
  • ReadOnlyMany -- 卷可以被多个节点以只读方式挂载
  • ReadWriteMany -- 卷可以被许多节点以读写方式挂载”

所以我想知道为什么一切正常,而它不应该?

更多信息:我们使用 NFS 进行存储,我们没有使用动态配置,下面是我们如何定义我们的 pv 和 pvc(我们使用 helm):

- apiVersion: v1
  kind: PersistentVolume
  metadata:
    name: gstreamer-{{ .Release.Namespace }}
  spec:
    capacity:
      storage: 10Gi
    accessModes:
      - ReadWriteOnce
    persistentVolumeReclaimPolicy: Recycle
    mountOptions:
      - hard
      - nfsvers=4.1
    nfs:
      server: {{ .Values.global.nfsserver }}
      path: /var/nfs/general/gstreamer-{{ .Release.Namespace }}

- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: gstreamer-claim
    namespace: {{ .Release.Namespace }}
  spec: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-pvc kubernetes-pod

5
推荐指数
1
解决办法
2031
查看次数

Shell 脚本应等到 kubernetes pod 运行

在一个简单的 bash 脚本中,我想运行多个kubectlhelm命令,例如:

helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.5.4 \
  --set installCRDs=true
kubectl apply -f deploy/cert-manager/cluster-issuers.yaml
Run Code Online (Sandbox Code Playgroud)

我的问题是,在helm install命令之后我必须等到 cert-manager pod 运行,然后kubectl apply才能使用该命令。现在脚本调用它太早了,所以它会失败。

bash shell kubectl kubernetes-pod

5
推荐指数
1
解决办法
8633
查看次数

如何在 20 天后自动自毁 Kubernetes Pod?

我需要设置一个 kubernetes pod 来为我的 Web 应用程序的客户端创建演示环境,试用期为 20 天。20天后,pod应该会自动删除,如何让pod在20天后自毁?我使用 Rancher 来部署我的 Pod。

demo kubernetes rancher kubernetes-pod

5
推荐指数
1
解决办法
2827
查看次数

无法连接到 Kubernetes NodePort 服务

我有一个使用以下内容创建的正在运行的 Pod pod-definition.yaml

apiVersion: v1
kind: Pod
metadata:
    name: microservice-one-pod-name
    labels:
        app: microservice-one-app-label
        type: front-end
spec:
    containers:
    - name: microservice-one
      image: vismarkjuarez1994/microserviceone
      ports:
      - containerPort: 2019
Run Code Online (Sandbox Code Playgroud)

然后我使用以下命令创建了一个服务service-definition.yaml

kind: Service
apiVersion: v1
metadata:
  name: microserviceone-service
spec:
  ports:
    - port: 30008
      targetPort: 2019
      protocol: TCP
  selector:
    app: microservice-one-app-label
  type: NodePort
Run Code Online (Sandbox Code Playgroud)

然后我跑去kubectl describe node minikube寻找我应该连接的节点 IP——结果是:

Addresses:
  InternalIP:  192.168.49.2
  Hostname:    minikube
Run Code Online (Sandbox Code Playgroud)

但是当我运行以下curl命令时没有得到任何响应:

curl 192.168.49.2:30008
Run Code Online (Sandbox Code Playgroud)

192.168.49.2:30008当我尝试从浏览器访问时,请求也会超时。

Pod 日志显示容器已启动并正在运行。为什么我无法访问我的服务?

kubernetes kubernetes-pod kubernetes-service

5
推荐指数
1
解决办法
6552
查看次数