我试图理解注释和标签之间的区别。
我对注释的理解是,它是添加键值对的元数据,Kubernetes 无法使用这些元数据来识别/过滤资源。
另一方面,标签是 Kubernetes 可以用来识别/过滤资源的元数据键值对。
这是正确的吗?如果是这样,那么注解的实际用途是什么?跟性能有关系吗?标签在 Kubernetes 扫描仪的过滤器和注释下的位置纯粹是为了添加仅供参考的元数据?
但我见过部署需要 Nginx 或使用注释的入口功能的情况。那么它是如何被搜索或使用的呢?为什么这里不使用标签呢?
我们什么时候在标签上使用注释,反之亦然?各自的优点和缺点是什么?
我的理解相当有限,但是阅读官方文档并没有真正帮助我理解何时使用注释和标签的用例。
Kubernetes Ingress API 版本networking.k8s.io/v1在 wrt extensions/v1beta1 字段中有很多变化,如下所示:
* `spec.backend` -> `spec.defaultBackend`
* `serviceName` -> `service.name`
* `servicePort` -> `service.port.name` (for string values)
* `servicePort` -> `service.port.number` (for numeric values)
* `pathType` no longer has a default value in v1; "Exact", "Prefix", or "ImplementationSpecific" must be specified
Run Code Online (Sandbox Code Playgroud)
将所有入口 yaml 文件从 extensions/v1beta1 转换为networking.k8s.io/v1 的最简单方法是什么。
看起来 kubectl convert 在 v1.19 中已经被弃用了。
Kubernetes 版本:
kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:30:33Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", …Run Code Online (Sandbox Code Playgroud) 我正在使用https://github.com/kubernetes/client-go并且一切正常。
我有官方 Kubernetes 仪表板的清单 (YAML):https ://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
我想kubectl apply在 Go 代码中使用 client-go模仿这个清单。
我知道我需要将 YAML 字节进行一些(取消)编组到包中定义的正确 API 类型中:https : //github.com/kubernetes/api
我已经成功地将Create单个 API 类型添加到我的集群中,但是对于包含不同类型列表的清单,我该如何执行此操作?是否有kind: List*支持这些不同类型的资源?
我目前的解决方法是使用csplitwith --- 作为分隔符拆分 YAML 文件
csplit /path/to/recommended.yaml /---/ '{*}' --prefix='dashboard.' --suffix-format='%03d.yaml'
Run Code Online (Sandbox Code Playgroud)
接下来,我遍历创建的新 (14) 部分,读取它们的字节,打开 UniversalDeserializer 的解码器返回的对象类型,并使用我的 k8s 客户端集调用正确的 API 方法。
我想以编程方式执行此操作,以便将仪表板的任何新版本更新到我的集群中。我还需要为 Metrics Server 和许多其他资源执行此操作。另一种(可能更简单)方法是将我的代码与安装了 kubectl 的容器镜像一起发送并直接调用kubectl apply -f -; 但这意味着我还需要将 kube 配置写入磁盘,或者将其内联传递,以便 kubectl 可以使用它。
我发现这个问题很有帮助:https : //github.com/kubernetes/client-go/issues/193 解码器住在这里:https : //github.com/kubernetes/apimachinery/tree/master/pkg/runtime/序列化器 …
我的 K3s 集群正在运行以下 pod:
kube-system pod/calico-node-xxxx
kube-system pod/calico-kube-controllers-xxxxxx
kube-system pod/metrics-server-xxxxx
kube-system pod/local-path-provisioner-xxxxx
kube-system pod/coredns-xxxxx
xyz-system pod/some-app-xxx
xyz-system pod/some-app-db-xxx
Run Code Online (Sandbox Code Playgroud)
我想停止所有 K3s pod 并重置 containerd 状态,因此我使用了/usr/local/bin/k3s-killall.shwatch kubectl get all -A脚本,所有 pod 都停止了(至少除了消息之外我看不到任何内容The connection to the server 127.0.0.1:6443 was refused - did you specify the right host or port?)
有人可以告诉我如何启动 k3s 服务器,因为现在在触发后kubectl get all -A我收到消息The connection to the server 127.0.0.1:6443 was refused - did you specify the right host or port?
附:
k3s server …kubernetes kubernetes-apiserver kubernetes-pod kubernetes-service k3s
How do I determine which apiGroup any given resource belongs in?
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
namespace: default
name: thing
rules:
- apiGroups: ["<wtf goes here>"]
resources: ["deployments"]
verbs: ["get", "list"]
resourceNames: []
Run Code Online (Sandbox Code Playgroud) Jenkins version : 2.121.3
Run Code Online (Sandbox Code Playgroud)
我在Jenkins中使用k8s插件,它帮助我在我的k8s集群上部署顺序和并行作业.
这是Jenkinsfile工作失败的部分
parallel([
build: {
stage('check formatting')
// some code
stage('build')
// some code
stage('build image')
// some code
stage('push image')
// some code
},
test: {
stage('test')
// some code
stage('build e2e test image')
// some code
}
stage('push e2e test image')
// some code
},
failFast: true])
Run Code Online (Sandbox Code Playgroud)
在运行具有并行阶段的作业时,我遇到了错误
caught java.io.IOException: Connection was rejected, you should increase the Max connections to Kubernetes API
Run Code Online (Sandbox Code Playgroud)
然后我转到管理Jenkins - >配置系统 - >云 - > Kubernetes并通过说.... 20增加"最大连接到Kubernetes API"并重新运行该作业并且它可以工作.如果我在此之后尝试重新运行该作业,它将失败并出现相同的错误,然后我必须再次增加限制.所以我在无休止的循环中做了以下事情: …
我正在使用AWS'EKS,这是Kubernetes v1.10,我正在使用client-go v7.0.0.
我要做的是解析文件中包含多个Kubernetes资源定义的.yml文件,并将这些资源提交给Kubernetes API.我可以使用此代码成功解析文件scheme.Codecs.UniversalDeserializer().Decode,然后返回一个数组runtime.Object.
我知道所有Kubernetes资源都符合runtime.Object接口,但我找不到将通用接口提交给API的方法.我见过的大多数方法都使用了Deployment,Pod等具体类型的方法.
我已经看到了像这样的通用RESTClient的一些代码clientset.RESTClient().Put().Body(obj).Do(),但这不起作用,我无法弄明白.
我知道我的客户端配置正确,因为我可以成功列出所有Pod.
我正在使用 Kubernetes v1.13.0。我的主节点也用作工作节点,因此除了控制平面 pod 之外,它还运行着工作负载 pod。
我的 master 上的 kubelet 日志显示以下几行:
eviction_manager.go:340] eviction manager:必须驱逐 pod(s) 以回收临时存储 eviction_manager.go:358]驱逐经理:荚排名驱逐:KUBE控制器的管理器-vm2_kube系统(1631c2c238e0c5117acac446b26d9f8c),KUBE-API服务器-vm2_kube系统(ce43eba098d219e13901c4a0b829f43b),ETCD-vm2_kube系统(91ab2b0ddf4484a5ac6ee9661dbd0b1c)
一旦 kube-apiserver pod 被驱逐,集群将变得无法使用。
我能做些什么来解决这个问题?我应该添加更多的临时存储吗?我该怎么做?这意味着向主机上的根分区添加更多空间吗?
我的理解是临时存储由/var/log和/var/lib/kubelet文件夹组成,它们都位于根分区下。
df -h我的主机上的A显示:
已使用的文件系统大小 Avail Use% Mounted on /dev/vda1 39G 33G 6.2G 85% /
所以看起来root分区有很多内存,并且没有磁盘压力。那么是什么导致了这个问题呢?我的一些工作舱肯定在存储方面做了一些疯狂的事情,但它仍然是 6G,似乎有足够的空间。
向根分区添加更多空间会暂时解决此问题吗?
kubectl describe vm2 提供以下信息:
状况: 类型状态 LastHeartbeatTime LastTransitionTime 原因消息 ---- ------ ----------------- ----- ----- - ------- MemoryPressure False Fri, 11 Jan 2019 21:25:43 +0000 Wed, 05 Dec 2018 19:16:41 +0000 KubeletHasSufficientMemory kubelet 有足够的可用内存 DiskPressure False Fri, …
根据此文档,我尝试使用以下命令从 pod 访问 Kuberenetes API
curl --cacert ca.crt -H "Authorization: Bearer $(<token)" https://kubernetes/apis/extensions/v1beta1/namespaces/default/deployments/ballerina-prime/scale
遵循以下模板
curl --cacert ca.crt -H "Authorization: Bearer $(<token)" https://kubernetes/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale
它抛出以下错误
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "deployments.extensions \"ballerina-prime\" is forbidden: User \"system:serviceaccount:default:default\" cannot get resource \"deployments/scale\" in API group \"extensions\" in the namespace \"default\"",
"reason": "Forbidden",
"details": {
"name": "ballerina-prime",
"group": "extensions",
"kind": "deployments"
},
"code": 403
}
Run Code Online (Sandbox Code Playgroud)
有人可以指出我在哪里犯了错误,或者建议我访问 Kubernetes API 的任何其他方式吗?
更新01
我根据建议的文档创建了一个角色。以下是我使用的清单。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default …Run Code Online (Sandbox Code Playgroud) 我正在使用服务器上的 Kubernetes API 创建部署。部署 Pod 有两个容器 - 一个是主容器,另一个是 Sidecar 容器,用于检查 Pod 的运行状况并在运行状况良好时调用服务器。
我正在使用此端点来进行部署。它具有部署状态属性,其结构如下所述。
我无法理解availableReplicas、readyReplicas、replicas和字段。unavailableReplicasupdatedReplicas
我也检查了 Kubernetes 的文档和这些 SO 问题 - What is the Difference Between current and available pod replicas in kubernetes deployment? kubectl中“可用”和“不可用”的含义描述了部署,但无法推断 pod 准备就绪、正在运行和可用之间的区别。有人可以解释一下这些术语和状态之间的区别吗?
kubernetes ×10
client-go ×2
admin ×1
deployment ×1
devops ×1
go ×1
jenkins ×1
k3s ×1
kubectl ×1