我有一个包含21个节点的Google容器引擎群集,特别是有一个pod我需要始终在具有静态IP地址的节点上运行(出于出站目的).
Kubernetes支持DaemonSets
通过为节点提供与DaemonSet中的nodeSelector匹配的标签,可以将pod部署到特定节点(或一组节点).然后,您可以为标记节点所在的VM实例分配静态IP.但是,GKE似乎不支持DaemonSet类型.
$ kubectl create -f go-daemonset.json
error validating "go-daemonset.json": error validating data: the server could not find the requested resource; if you choose to ignore these errors, turn validation off with --validate=false
$ kubectl create -f go-daemonset.json --validate=false
unable to recognize "go-daemonset.json": no kind named "DaemonSet" is registered in versions ["" "v1"]
Run Code Online (Sandbox Code Playgroud)
何时支持此功能以及解决方法是什么?
我借助kube-up.sh在Google计算引擎上启动了数据仓库。该脚本创建了主节点和奴才组。在我不再需要它之后,我想停止集群并关闭所有VM,以免浪费金钱来执行实例。当我关闭它时(我只是关闭了所有群集虚拟机,因为我不知道另一种方法),然后在一段时间后再次启动,群集将无法正常工作。“ kubectl获取节点”会显示关于节点的不正确信息(例如,我有ABC节点==奴才,它仅显示甚至不存在的D),所有命令的运行速度都非常慢。也许我关机不正确。如何适当地停止群集并停止VM,以便在某个时间再次启动它?(不删除)
我有什么集群:
kubernetes-master | us-central1-b
kubernetes-minion-group-nq7f | us-central1-b
kubernetes-minion-group-gh5k | us-central1-b
Run Code Online (Sandbox Code Playgroud)
显示“ kubectl获取节点”命令的内容:
[root@common frest0512]# kubectl get nodes
NAME STATUS AGE VERSION
kubernetes-master Ready,SchedulingDisabled 7h v1.8.0
kubernetes-minion-group-02s7 Ready 7h v1.8.0
kubernetes-minion-group-92rn Ready 7h v1.8.0
kubernetes-minion-group-kn2c Ready 7h v1.8.0
Run Code Online (Sandbox Code Playgroud)
关闭主节点之前,它显示正确(名称和仆从数相同)。
创建新的GKE集群后,创建集群角色失败,并显示以下错误:
Error from server (Forbidden): error when creating "./role.yaml":
clusterroles.rbac.authorization.k8s.io "secret-reader" is forbidden:
attempt to grant extra privileges: [PolicyRule{Resources:["secrets"],
APIGroups:[""], Verbs:["get"]} PolicyRule{Resources:["secrets"],
APIGroups:[""], Verbs:["watch"]} PolicyRule{Resources:["secrets"],
APIGroups:[""], Verbs:["list"]}] user=&{XXX@gmail.com
[system:authenticated] map[authenticator:[GKE]]} ownerrules= .
[PolicyRule{Resources:["selfsubjectaccessreviews"
"selfsubjectrulesreviews"], APIGroups:["authorization.k8s.io"], Verbs:
["create"]} PolicyRule{NonResourceURLs:["/api" "/api/*" "/apis"
"/apis/*" "/healthz" "/swagger-2.0.0.pb-v1" "/swagger.json"
"/swaggerapi" "/swaggerapi/*" "/version"], Verbs:["get"]}]
ruleResolutionErrors=[]
Run Code Online (Sandbox Code Playgroud)
我的帐户在IAM中具有以下权限:
Kubernetes Engine Admin
Kubernetes引擎集群管理员
所有者
这是我的role.yaml(来自Kubernetes文档):
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Run Code Online (Sandbox Code Playgroud)
根据RBAC的GCloud文档,我需要 …
rbac google-cloud-platform kubernetes google-kubernetes-engine
TL; DR.关于如何在删除PVC后访问数据,以及为什么PV在删除PVC后不会消失,我很遗憾.
我正在采取的步骤:
手动在GCE中创建了一个磁盘:
gcloud compute disks create --size 5Gi disk-for-rabbitmq --zone europe-west1-b
Run Code Online (Sandbox Code Playgroud)跑:
kubectl apply -f /tmp/pv-and-pvc.yaml
Run Code Online (Sandbox Code Playgroud)
使用以下配置:
# /tmp/pv-and-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-for-rabbitmq
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
gcePersistentDisk:
fsType: ext4
pdName: disk-for-rabbitmq
persistentVolumeReclaimPolicy: Delete
storageClassName: standard
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-for-rabbitmq
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: standard
volumeName: pv-for-rabbitmq
Run Code Online (Sandbox Code Playgroud)手动删除了一个PVC(在高级别:我在这里模拟一个灾难性的场景,比如意外删除或错误配置一个helm版本):
kubectl delete pvc pvc-for-rabbitmq
Run Code Online (Sandbox Code Playgroud)此时我看到以下内容:
$ kubectl get pv
NAME CAPACITY ACCESS MODES …Run Code Online (Sandbox Code Playgroud) google-cloud-storage google-cloud-platform kubernetes google-kubernetes-engine
在 GKE 中,当我们创建节点时,会有一个 master 节点,并且会创建许多 worker 节点。我怀疑主节点是我们创建的一个(提到副本)还是GKE单独创建主节点。形成 gke 集群的拓扑(例如,网格,星形)是什么?
我有一个私人注册表 (gitlab),我的 docker 图像存储在其中。对于部署,会创建一个密钥,允许 GKE 访问注册表。秘密被称为deploy-secret。密钥的登录信息在注册表中很短的时间后就会过期。
我还创建了第二个永久机密,允许访问 docker 注册表,名为permanent-secret.
是否可以用两个秘密指定 Pod?例如:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <your-private-image>
imagePullSecrets:
- name: deploy-secret
- name: permanent-secret
Run Code Online (Sandbox Code Playgroud)
Kubernetes 在稍后尝试重新拉取镜像时,是否会识别出第一个秘密不起作用(不允许对私有注册表进行身份验证),然后成功回退到第二个秘密?
我想用一个存在于'eu.gcr.io'(相同项目)上的新映像来更新我在kubernetes上的部署,我之前已经做过。但是现在,吊舱无法拉动图像,因为它们无权这样做。这是我们在pod日志中得到的错误。
Failed to pull image "eu.gcr.io/my-gcp-project/my-image:v1.009":
rpc error: code = Unknown desc = Error response from daemon:
unauthorized: You don't have the needed permissions to perform this operation,
and you may have invalid credentials.
Run Code Online (Sandbox Code Playgroud)
群集上的服务帐户具有kubernetes admin和storage admin角色,这应该足够。但是,即使我制作了服务帐户项目编辑器(出于调试目的),它仍然不起作用(相同的错误)。
我也尝试过创建一个新的新集群(默认设置)并在那里应用我的部署,但是随后出现了完全相同的问题。
我不确定我可以尝试什么。
任何帮助或建议,我们将不胜感激。
编辑:
我只是发现我仍然可以拉出并部署旧映像。但是,我创建的每个新映像都不能被kubernetes容器所吸引。
google-cloud-platform kubernetes google-kubernetes-engine google-container-registry google-iam
当我尝试将一个小文件复制到 Kubernetes pod 时,它失败并显示以下错误:
:~ $kubectl cp /tmp/a default/resolver-proxy-69dc786fcf-5rplg:/usr/local/bin/ --no-preserve=true
tar: a: Cannot open: Permission denied
tar: Exiting with failure status due to previous errors
command terminated with exit code 2
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?我在 minikube 上运行 Kubernetes。
由于类似的错误,我还看到另一个 Postgres Pod 处于 Error 状态:
:~ $kubectl logs postgres-7676967946-7lp9g postgres
tar: /var/lib/postgresql/data: Cannot open: Permission denied
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud) copy-paste kubernetes google-kubernetes-engine kubectl minikube
我对 GCP 很陌生,主要使用 AWS。我目前正在尝试使用 GCP 并希望使用docker-compose.
我设置了一个非常基本的 docker-compose.yml 文件,如下所示:
# docker-compose.yml
version: '3.3'
services:
git:
image: alpine/git
volumes:
- ${PWD}:/git
command: "clone https://github.com/PHP-DI/demo.git"
composer:
image: composer
volumes:
- ${PWD}/demo:/app
command: "composer install"
depends_on:
- git
web:
image: php:7.4-apache
ports:
- "8080:${PORT:-80}"
- "8000:${PORT:-8000}"
volumes:
- ${PWD}/demo:/var/www/html
command: php -S 0.0.0.0:8000 -t /var/www/html
depends_on:
- composer
Run Code Online (Sandbox Code Playgroud)
因此容器将从 git 获取代码,然后使用 composer 安装依赖项,最后在端口 8000 上可用。
在我的机器上,运行docker-compose up无所不能。但是如何将这个 docker-compose 推送到谷歌云。
我尝试使用docker/compose图像和 Dockerfile构建容器,如下所示:
FROM docker/compose
WORKDIR /opt
COPY docker-compose.yml …Run Code Online (Sandbox Code Playgroud) docker google-cloud-platform google-kubernetes-engine docker-compose google-cloud-run
自从 GKE 升级到 1.21.10-gke.2000 以来,我每隔 5 分钟左右就会在 konnectivity-agent 日志中看到这些错误。我无法发现这些问题的任何后果,但我也无法让它们消失。有谁知道问题是什么以及我如何让它消失?
pod_name: "konnectivity-agent-779eadf84d-98kjh"
"conn write failure" err="write tcp 10.48.0.2:40528->10.48.0.8:10250: use of closed network connection" connectionID=215
"connection read failure" err="read tcp 10.48.0.2:40528->10.48.0.8:10250: use of closed network connection"
Run Code Online (Sandbox Code Playgroud)