我正在关注该教程(https://www.baeldung.com/spring-boot-minikube),我想在yaml文件(simple-crud-dpl.yaml)中创建Kubernetes部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: simple-crud
spec:
selector:
matchLabels:
app: simple-crud
replicas: 3
template:
metadata:
labels:
app: simple-crud
spec:
containers:
- name: simple-crud
image: simple-crud:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时kubectl create -f simple-crud-dpl.yaml我得到了:
error: SchemaError(io.k8s.api.autoscaling.v2beta2.MetricTarget): invalid object doesn't have additional properties
我正在使用kubectl的最新版本:
kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.11", GitCommit:"637c7e288581ee40ab4ca210618a89a555b6e7e9", GitTreeState:"clean", BuildDate:"2018-11-26T14:38:32Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:45:25Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
Run Code Online (Sandbox Code Playgroud)
我也在本地使用minikube,如教程中所述。一切正常,直到部署和服务。我做不到。
有没有办法为Kubernetes部署创建继承树?我有许多类似但不完全相同的部署.他们共享许多ENV变量而不是全部.他们都使用相同的图像.
例如,我有一个开发部署,其配置几乎与生产部署相同,但有env vars指向不同的数据库后端.我有一个celery部署,其配置与生产部署相同,但是,它具有不同的运行命令.
我目前正在使用以下方法尝试将给定部署中的 Kubernetes Pod 均匀地分布在所有 Kubernetes 节点上:
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
topologyKey: kubernetes.io/hostname
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- api
Run Code Online (Sandbox Code Playgroud)
然而,我注意到topologySpreadConstraintsKubernetes 最近添加了一个新属性。在 Kubernetes 部署中从使用切换affinity.podAntiAffinity到使用有什么优势?topologySpreadConstraints有什么理由要转行吗?该语法会是什么样子来匹配我目前在上面所做的事情?
我看到 Kubernetes Job&Deployment提供了非常相似的配置。两者都可以部署一个或多个具有特定配置的 Pod。所以我对这些问题很少有疑问:
.spec.template中的Pod 规格是否不同?JobDeploymentJob和completions的Deployment区别是什么replicas?Deployment并完成(没有服务器或守护进程进程容器),则 pod 将终止。这同样适用于a Job。那么这两种资源中的 pod 生命周期有何不同?我需要使用 RBAC 授予对一个部署和此部署的所有 pod 的访问权限。我已经成功地配置Role和RoleBinding对deploymet,这是工作的罚款:
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
namespace: <my-namespace>
name: <deployment>-manager-role
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["deployments"]
resourceNames: ["<deployment>"]
verbs: ["get", "list", "watch", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: <deployment>-manager-binding
namespace: <my-namespace>
subjects:
- kind: User
name: <username>
apiGroup: ""
roleRef:
kind: Role
name: <deployment>-manager-role
apiGroup: ""
Run Code Online (Sandbox Code Playgroud)
使用此角色用户可以访问、更新和修补部署。此部署创建具有动态名称(如<deployment>-5594cbfcf4-v4xx8)的pod 。我试图允许此用户使用部署名称和使用部署名称 + 通配符字符访问这些 pod(获取、列出、监视、读取日志、执行、删除)*:
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
namespace: <my-namespace>
name: …Run Code Online (Sandbox Code Playgroud) .spec.selector 字段定义 Deployment 如何查找要管理的 Pod。但是我们还在模板内定义了标签,那么我们通过 .spec.selectors 字段得到的额外东西是什么,因为 Deployment 也可以找到要使用模板中定义的标签进行管理的 Pod?
在下面的代码中,带有“label occloud.oracle.com/open-network-policy:allow”的 pod 如何通过部署进行管理,因为在 spec.selectors 中没有描述它
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: cheeseshop
spec:
replicas: 1
progressDeadlineSeconds: 180
selector:
matchLabels:
app.kubernetes.io/name: tutorial
app.kubernetes.io/component: cheeseshop
template:
metadata:
labels:
app.kubernetes.io/name: tutorial
app.kubernetes.io/component: cheeseshop
occloud.oracle.com/open-network-policy: allow
name: cheeseshop
Run Code Online (Sandbox Code Playgroud) yaml kubernetes google-kubernetes-engine kubernetes-deployment kubernetes-pod
我有我正在做的 docker 图像
docker run --name test -h test -p 9043:9043 -p 9443:9443 -d ibmcom/websphere-traditional:install
Run Code Online (Sandbox Code Playgroud)
我试图放入一个 kubernetes 部署文件,我有这个:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: websphere
spec:
replicas: 1
template:
metadata:
labels:
app: websphere
spec:
containers:
- name: websphere
image: ibmcom/websphere-traditional:install
ports:
- containerPort: 9443
resources:
requests:
memory: 500Mi
cpu: 0.5
limits:
memory: 500Mi
cpu: 0.5
imagePullPolicy: Always
Run Code Online (Sandbox Code Playgroud)
我的服务.yaml
apiVersion: v1
kind: Service
metadata:
name: websphere
labels:
app: websphere
spec:
type: NodePort #Exposes the service as a node ports
ports:
- …Run Code Online (Sandbox Code Playgroud) 当我在 kubernetes 中定义例如部署时,有一个包含容器列表的部分,每个容器都包含一组端口,例如:
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
现在这里的文档明确表示它不会影响连接:
要从容器公开的端口列表。在此处公开端口可为系统提供有关容器使用的网络连接的附加信息,但主要是信息性的。在此处不指定端口不会阻止该端口被公开。任何侦听容器内默认“0.0.0.0”地址的端口都可以从网络访问。无法更新。
现在看来它并没有真正影响任何东西,只是信息性的,但这究竟意味着什么,它在哪里使用?
我发现它的一个用途是,如果端口定义了一个名称,则可以通过该名称从服务中引用它。
是它还是这个规范还有其他用途?
kubernetes kubernetes-deployment kubernetes-container kubernetes-service kubernetes-networking
我尝试使用kubernetes安装dgraph(单个服务器)。现在我需要删除的是已创建的Pod。我使用kubectl delete pod pod-name删除了它,结果显示“ pod delete”,但是pod又重新创建了自己,并继续复制。我需要从Kubernetes中取出那些豆荚。我现在应该怎么做?
我是 kubernetes 的新手。
我无法使用 kubectl 进行部署,但我可以在 kubernetes 仪表板上看到所有部署。我该如何解决这个问题?
user@master:~$ kubectl get deployments
error: the server doesn't have a resource type "deployments"
Run Code Online (Sandbox Code Playgroud)
Kubernetes 版本: 1.12
kubectl 版本: 1.13
kubectl api 版本:
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
v1
api资源:
user@master:~$ kubectl api-resources
NAME SHORTNAMES APIGROUP NAMESPACED
KIND
bindings true
Binding
componentstatuses cs false
ComponentStatus
configmaps cm true
ConfigMap
endpoints ep true
Endpoints
events ev true
Event
limitranges limits true
LimitRange
namespaces ns false
Namespace
nodes no false
Node
persistentvolumeclaims pvc true
PersistentVolumeClaim
persistentvolumes pv false …Run Code Online (Sandbox Code Playgroud)