我正在尝试使用Kubernetes Client for Go更新Openshift中的现有部署。我正在使用以下JSON将副本更新为3:
JSON:
{
"kind": "Deployment",
"spec": {
"template": {
"spec": {
"containers": {
"image": "docker.fmr.com\/fmr-pr000105\/testcontainer:1.0.0",
"name": "testcontainer",
"resources": {
"requests": {
"cpu": "50m"
},
"limits": {
"cpu": "50m",
"memory": "50M"
}
},
"ports": {
"protocol": "TCP",
"name": "test-con-http",
"containerPort": 22
}
}
},
"metadata": {
"labels": {
"app": "testcontainer"
}
}
},
"replicas": 3
},
"apiVersion": "extensions\/v1beta1",
"metadata": {
"name": "testcontainer"
}
}
Run Code Online (Sandbox Code Playgroud)
但是继续得到错误:
only encoded map or array can be decoded into a struct
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码:
import …Run Code Online (Sandbox Code Playgroud) 很难弄清楚出了什么问题。我有一个远程 kubernetes 集群,并已在本地复制配置。我知道这是正确的,因为我已经得到了其他可以为我工作的命令。
我无法开始工作的是部署补丁。我的代码:
const namespace = "default"
var clientset *kubernetes.Clientset
func init() {
kubeconfig := "/Users/$USER/go/k8s-api/config"
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
log.Fatal(err)
}
// create the clientset
clientset, err = kubernetes.NewForConfig(config)
if err != nil {
panic(err.Error())
}
}
func main() {
deploymentsClient := clientset.ExtensionsV1beta1().Deployments("default")
patch := []byte(`[{"spec":{"template":{"spec":{"containers":[{"name":"my-deploy-test","image":"$ORG/$REPO:my-deploy0.0.1"}]}}}}]`)
res, err := deploymentsClient.Patch("my-deploy", types.JSONPatchType, patch)
if err != nil {
panic(err)
}
fmt.Println(res)
}
Run Code Online (Sandbox Code Playgroud)
我得到的只是:
panic: the server rejected our request due to an error …
Kubernetes 远程 API 允许使用代理动词对任意 pod 端口进行 HTTP 访问,即使用/api/v1/namespaces/{namespace}/pods/{name}/proxy.
Python 客户端提供corev1.connect_get_namespaced_pod_proxy_with_path()调用上述代理动词的功能。
尽管阅读、浏览和搜索 Kubernetes client-go 一段时间,我仍然不知道如何使用 goclient 执行与 python 客户端相同的操作。我的另一个印象是,如果没有现成的 API corev1 调用可用,我可能需要深入研究客户端变更集的其余客户端?
如何使用其余客户端和上述路径正确构建 GET 调用?
我正在寻找一种kubectl auth can-i get pods --as system:serviceaccount:default:test使用 kubernetes go-client 运行的方法。
到目前为止,我得到了下面的代码,但它不起作用,因为与 相比,我得到了不同的响应kubectl auth can-i。我知道这是关于冒充,所以我添加了rest.ImpersonationConfig但它仍然不起作用。
重现步骤:
kind create cluster
kubectl create sa test
kubectl create role test --verb=get --verb=list --resource=pods
kubectl create rolebinding test --role=test --serviceaccount=default:test
kubectl auth can-i get pod --as system:serviceaccount:default:test
# yes
Run Code Online (Sandbox Code Playgroud)
代码:
kind create cluster
kubectl create sa test
kubectl create role test --verb=get --verb=list --resource=pods
kubectl create rolebinding test --role=test --serviceaccount=default:test
kubectl auth can-i get pod --as system:serviceaccount:default:test
# yes
Run Code Online (Sandbox Code Playgroud) 我有一个Kubernetes集群,并有一个运行容器(X).从这个容器我想创建一个新的命名空间,在这个名称空间中部署一个pod并生成容器(Y).我知道kubernetes提供REST API.但是,我正在探索goClient做同样的事情,不知道如何使用命名空间创建API.
我正在尝试使用官方的kubernetes python-client自动化kubernetes worker节点。我目前正在寻找一种方法来安全地将所有正在运行的应用程序移至其他节点。我们可以使用“ kubectl排水”来做到这一点。我没有找到使用python客户端模拟该功能的方法。我目前正在研究此库是否支持排水功能?
我正在尝试将kubernetes go-client与 cloud.google.com/go/container 一起使用。我使用 google cloud go 容器包创建集群,然后我想使用 go-client 在该集群上部署。go-client 给出的集群外示例使用kube 配置文件来获取集群的凭据。但由于我刚刚在应用程序中创建了这个集群,所以我没有\xe2\x80\x99t 有该配置文件。
\n\n如何使用“google.golang.org/genproto/googleapis/container/v1”集群设置 \xe2\x80\x9ck8s.io/client-go/rest\xe2\x80\x9d 配置?必填字段有哪些?下面的代码是我目前拥有的代码(没有显示实际的 CA 证书)。
\n\nfunc getConfig(cluster *containerproto.Cluster) *rest.Config {\n return &rest.Config{\n Host: "https://" + cluster.GetEndpoint(),\n TLSClientConfig: rest.TLSClientConfig{\n Insecure: false,\n CAData: []byte(`-----BEGIN CERTIFICATE-----\n ...\n -----END CERTIFICATE-----`),\n },\n }\nRun Code Online (Sandbox Code Playgroud)\n\n它会导致以下错误:x509:由未知颁发机构签名的证书。所以显然缺少一些东西。\n任何其他方法都非常受欢迎!提前致谢
\ngo google-cloud-platform kubernetes google-kubernetes-engine kubernetes-go-client
我正在尝试删除kubernetes集群中的Pod,然后检查其状态以查看Pod下来需要多长时间才能重新启动。对于第二部分,我找不到任何有用的示例,该示例使用go-client获取特定的pod状态。任何帮助表示赞赏。
我正在创建一个程序,该程序以*v1.DeploymentList. 我设法做到了这一点并且有效。然后我对该列表进行一些处理,然后执行许多操作。现在,我有一个新的要求;还需要能够仅提取一个部署并对其应用相同的逻辑。问题是,当我使用 get 部署时,我得到的*v1.Deployment当然是不同的,*v1.DeploymentList因为这是一个列表。现在,这个 DeploymentList 不是一个切片,所以我不能只使用append也不知道如何转换/转换。作为一个“务实”的解决方案,我试图做的只是将该 Deployment 转换为 DeploymentList,然后应用其余的逻辑作为部署,因为更改其他所有内容此时将意味着很多负担。
我有以下代码:
func listK8sDeployments(the_clientset *kubernetes.Clientset, mirrorDeploy *string) *v1.DeploymentList {
if mirrorDeploy != nil {
tmp_deployments, err := the_clientset.AppsV1().Deployments(apiv1.NamespaceDefault).Get(context.TODO(), *mirrorDeploy, metav1.GetOptions{})
if err != nil {
panic(err.Error())
}
// Here would need to convert the *v1.Deployment into *v1.DeploymentList a list to retun it according to my EXISTING logic. If I can do this, I do not need to change anything else on the program.
// …Run Code Online (Sandbox Code Playgroud) 我尝试根据标签列出 pod
// Kubernetes client - package kubernetes
clientset := kubernetes.NewForConfigOrDie(config)
// create a temp list for storage
var podslice []string
// Get pods -- package metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
pods, _ := clientset.CoreV1().Pods("").List(metav1.ListOptions{})
for _, p := range pods.Items {
fmt.Println(p.GetName())
}
Run Code Online (Sandbox Code Playgroud)
这相当于
kubectl get po
Run Code Online (Sandbox Code Playgroud)
有没有办法进入golang
kubectl get po -l app=foo
Run Code Online (Sandbox Code Playgroud)
提前致谢
go kubernetes google-kubernetes-engine kubernetes-go-client amazon-eks