我在Azure中创建了一个托管的Kubernetes集群,但它仅用于学习目的,因此我只想在我实际使用它时为计算付费.
有没有一种简单的方法可以优雅地关闭和启动VM,可用性集和负载平衡器?
我的问题(对MS和其他任何人)是:为什么这个问题发生了,用户/客户自己可以实现哪些解决方案而不是Microsoft支持?
关于这个问题,显然有一些"其他"问题:
多个GitHub问题发布到AKS回购:
加上一些推特线程:
目前最好的解决方案是发布帮助票 - 等待 - 或重新创建你的AKS集群(可能不止一次,交叉你的手指,见下文......)但应该有更好的东西.至少请授予AKS预览客户的能力,无论支持层如何,都要升级其针对此特定问题的支持请求严重性.
您还可以尝试扩展群集(假设不会破坏您的应用).
许多上述GitHub问题已经解决,但问题仍然存在.以前有一个关于这个问题的公告文件,但是目前还没有这样的状态更新,即使问题仍然存在:
我发布这个,因为我有一些我没有在其他地方看到的新花絮,我想知道是否有人有想法解决问题的其他潜在选择.
我在其他地方没有提到的第一篇文章是节点/ vms /实例上的资源使用情况,这些资源使用受上述Kubectl"无法连接到服务器:net/http:TLS握手超时"问题的影响.
我受影响的集群上的节点如下所示:
利用率和网络的下降与磁盘利用率的增加和我们开始遇到问题的时间段密切相关.
在此图表之前的整个节点/ VM利用率在过去30天内基本持平,并且与生产站点流量/更新推送等相关的一些颠簸.
对于上述观点,以下是在扩展然后退回之后相同节点的指标(这恰好缓解了我们的问题,但并不总是有效 - 请参见底部的答案):
请注意CPU和网络中的"Dip"? 这就是Net/http:TLS问题影响我们的地方 - 以及何时从Kubectl无法访问AKS服务器.似乎除了没有响应我们的请求之外,它还没有与VM/Node通信.
一旦我们回来(将#个节点向上扩展,然后退回 - 查看解决方法的答案),度量标准(CPU等)恢复正常 - 我们可以从Kubectl连接.这意味着我们可以创建一个关于此行为的警报(我在Azure DevOps方面询问此问题:https://github.com/Azure/AKS/issues/416)
Zimmergren在GitHub上结束表明他在更大的实例上遇到的问题少于运行裸骨小节点的问题.这对我来说很有意义,并且可能表明AKS服务器分配工作负载的方式(参见下一节)可能基于实例的大小.
"节点的大小(例如D2,A4等):)我经历过,当运行A4及以上时,我的群集比运行A2时更健康.(而且我有十几个类似的不幸的是,经历了大小组合和集群故障." (https://github.com/Azure/AKS/issues/268#issuecomment-375715435)
其他群集大小影响参考:
负责更小型集群的AKS服务器可能会更频繁地受到攻击?
我在其他地方没有提到的下一件事是你可以在同一个区域并排运行多个集群,其中一个集群(在这种情况下为我们生产)被'net/http:TLS握手超时'命中另一个工作正常,可以通过Kubectl正常连接(对我们来说这是我们相同的临时环境).
用户(上面的Zimmergren等)似乎认为节点大小影响此问题将影响您的可能性这一事实似乎也表明节点大小可能与子区域责任分配给子区域AKS的方式有关管理服务器.
这可能意味着重新创建具有不同群集大小的群集将更有可能将您置于不同的管理服务器上 …
我们以前的基于GitLab的CI/CD使用Authenticated curl请求到特定的REST API端点,以触发将更新的容器重新部署到我们的服务,如果您使用类似于基于Kubernetes的部署,则此问题适合您.
我们在Azure AKS群集上运行生产站点/应用程序(基于Ghost博客).现在我们手动将更新的容器推送到私有ACR(Azure容器注册表),然后使用Kubectl从命令行进行更新.
话虽如此,我们之前使用Docker Cloud进行编排,并使用GitLab-Ci完全集成了我们的生产/登台服务.
GitLab-Ci集成是目标,而"为什么"背后是这个问题.
由于我们之前使用过Docker Cloud(doh,应该从一开始就使用K8),我们应该如何处理GitLab-Ci能够利用Secrets创建Docker Cloud CLI然后使用Docker Cloud API进行身份验证以触发操作的事实在我们的节点上(即用新容器重新部署等).
虽然我相信我们可以构建一个容器(由我们的GitLab-Ci运行器使用),其中包含Kubectl和Azure CLI,但我知道Kubernetes也有类似的(对于docker cloud)Rest API,可以在这里找到(https ://kubernetes.io/docs/tasks/access-application-cluster/access-cluster) - 特别是关于连接WITHOUT Kubectl的部分似乎是相关的(关于HTTP REST API的部分).
我的问题是任何连接到Azure(或可能是其他托管Kubernetes服务)的人:
您的Ci/CD服务器如何通过Kubernetes服务提供商的Management Server进行身份验证,然后您如何触发更新/重新部署更新的容器/服务?
如果您使用Kubernetes HTTP Rest API重新部署服务,那么您的想法特别有价值!
在我完成整个过程时会更新.
continuous-integration azure gitlab kubernetes azure-kubernetes
我正在尝试将文件从Kubernetes Pods复制到我的本地系统。运行以下命令时出现以下错误:
kubectl cp aks-ssh2-6cd4948f6f-fp9tl:/home/azureuser/test.cap ./test.cap
Run Code Online (Sandbox Code Playgroud)
输出:
tar:home / azureuser / test:无法统计:没有这样的文件或目录tar:由于先前的错误而以失败状态退出错误:home / azureuser / test没有这样的文件或目录
我可以在上面给定的路径下看到文件。我真的很困惑。
你能帮我吗?
我正在研究Azure Kubernates,我们可以在其中存储Docker映像。在这里尝试检查我的kubectl版本,然后得到
无法连接到服务器:拨打tcp [:: 1]:8080:connectex:由于目标计算机主动拒绝连接,因此无法建立连接。
为此,我遵循了带有AKS和VSTS的MSDN:uilding微服务–第2部分 和Windows上的MSDOCS:Kubernetes。
因此,您能否建议我“如何解决此问题?”
powershell azure azure-cli azure-container-service azure-kubernetes
好吧,所以我搞砸了,我不小心碰到az ad sp reset-credentials了我们的AKS集群运行的服务主管.现在我们遇到的错误如下:
创建负载均衡器时出错(将重试):获取服务测试的LB/admin-api时出错:azure.BearerAuthorizer#WithAuthorization:无法刷新请求的令牌以访问https://management.azure.com/subscriptions/****/resourceGroups/MC_****/providers/Microsoft.Network/loadBalancers?api-version=2017-09-01:StatusCode = 0 - 原始错误:adal:刷新请求失败.状态代码='401'.响应正文:{"error":"invalid_client","error_description":"AADSTS70002:验证凭据时出错.AADSTS50012:提供了无效的客户端密码.\ r \nTrace ID:****\r \nCorrelation ID:****\r \n时间戳:2018-08-23 12:01:33Z","error_codes":[70002,50012],"timestamp":"2018-08-23 12:01:33Z","trace_id":"****", "CORRELATION_ID": "****"}
和
无法提取图像"****.azurecr.io/****:****":rpc错误:代码=未知desc =来自守护程序的错误响应:获取https://****.azurecr. io/v2/****/manifests/****:未经授权:需要验证
所以现在我想找到服务主体使用的原始客户端密钥,以便我可以将其重新添加为服务主体的密钥.除了重新创建整个集群之外,这是我能想到的唯一解决方案.
有任何想法吗?
azure azure-active-directory azure-container-service azure-kubernetes
我们已将Azure Kubernetes Clusters配置为使用Azure Active Directory RBAC.这意味着当使用kubectl时,我们需要首先作为AD用户进行身份验证(通常通过Web浏览器手动完成设备代码身份验证).我们几乎完全按照MSDN文章" 将Azure Active Directory与Azure Kubernetes服务集成"进行了配置.
问题是,现在,Azure DevOp管道中的Kubernetes构建/发布任务也需要此身份验证,例如,当我们运行kubectl apply时:
2019-01-02T08:48:21.2070286Z ##[section]Starting: kubectl apply
2019-01-02T08:48:21.2074936Z ==============================================================================
2019-01-02T08:48:21.2075160Z Task : Deploy to Kubernetes
2019-01-02T08:48:21.2075398Z Description : Deploy, configure, update your Kubernetes cluster in Azure Container Service by running kubectl commands.
2019-01-02T08:48:21.2075625Z Version : 1.1.17
2019-01-02T08:48:21.2075792Z Author : Microsoft Corporation
2019-01-02T08:48:21.2076009Z Help : [More Information](https://go.microsoft.com/fwlink/?linkid=851275)
2019-01-02T08:48:21.2076245Z ==============================================================================
2019-01-02T08:48:25.7971481Z Found tool in cache: kubectl 1.7.0 x64
2019-01-02T08:48:25.7980222Z Prepending PATH environment variable with directory: C:\agents\HephaestusForge\_work\_tool\kubectl\1.7.0\x64
2019-01-02T08:48:25.8666111Z [command]C:\agents\HephaestusForge\_work\_tool\kubectl\1.7.0\x64\kubectl.exe apply -f C:\agents\HephaestusForge\_work\r8\a\_MyProject\kubernetes\deploy.yaml …Run Code Online (Sandbox Code Playgroud) azure azure-active-directory azure-devops azure-pipelines azure-kubernetes
我的理解是,设置Service类型以LoadBalancer创建新的Azure负载均衡器并为其分配IP地址Service.这是否意味着我可以使用端口80拥有多个服务?如果我的Service(一个ASP.NET核心应用程序)后面的应用程序可以处理TLS和HTTPS,为什么我不应该只使用LoadBalancer's Service我想要暴露给互联网?
使用Ingressif有什么好处我不关心TLS终止(你可以让Cloudflare处理TLS终止)?如果有的话,它会通过为每个请求添加额外的跃点来减慢速度.
下面的一些答案提到创建负载平衡器的成本很高.应该注意的是,Azure上的负载均衡器是免费的,但是他们会为IP地址收取费用,他们会免费为您提供5个IP地址.因此,对于您希望公开最多五个IP地址的小型项目,它基本上是免费的.除此之外,你可能想看看广告Ingress.
如果您不使用,一些答案也会提到额外的复杂性Ingress.我已经提到Cloudflare可以为我处理TLS终止.我还发现了external-dnsKubernetes项目在Cloudflare中创建指向负载均衡器IP地址的DNS条目?在我看来,切割Ingress降低了复杂性,因为我不得不配置和管理.Ingress的选择也是巨大的,我可能会选择一个错误的选项,这会在一段时间后无法维护.
azure kubernetes azure-kubernetes kubernetes-ingress azure-aks
我使用cert-manager 0.5.2在我们的Kubernetes集群上管理Let的加密证书.
我使用的是Let's Encrypt暂存环境,但现在已经开始使用他们的生产证书了.问题是我的应用程序没有更新到新的有效证书.
在更新发行者,证书和入口资源时,我必须搞砸了一些东西,但我看不清楚是什么.我还重新安装了NGINX入口控制器和证书管理器,并重新创建了我的应用程序,但我仍然获得旧证书.我接下来该怎么办?
描述letsencrypt集群发行者:
Name: letsencrypt
Namespace:
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"certmanager.k8s.io/v1alpha1","kind":"ClusterIssuer","metadata":{"annotations":{},"name":"letsencrypt","namespace":""},"spec":{"acme":{"e...
API Version: certmanager.k8s.io/v1alpha1
Kind: ClusterIssuer
Metadata:
Cluster Name:
Creation Timestamp: 2019-01-04T09:27:49Z
Generation: 0
Resource Version: 130088
Self Link: /apis/certmanager.k8s.io/v1alpha1/letsencrypt
UID: 00f0ea0f-1003-11e9-997f-ssh3b4bcc625
Spec:
Acme:
Email: administrator@domain.com
Http 01:
Private Key Secret Ref:
Key:
Name: letsencrypt
Server: https://acme-v02.api.letsencrypt.org/directory
Status:
Acme:
Uri: https://acme-v02.api.letsencrypt.org/acme/acct/48899673
Conditions:
Last Transition Time: 2019-01-04T09:28:33Z
Message: The ACME account was registered with the ACME server
Reason: ACMEAccountRegistered
Status: True
Type: Ready
Events: <none> …Run Code Online (Sandbox Code Playgroud) 我有一些生产中的应用程序在Azure中工作。所有这些应用程序都属于同一公司,并且彼此通信。我想将它们迁移到Kubernetes。
我的问题是:这种情况下的最佳做法是什么?为什么?
有些人推荐一个群集和多个名称空间,但我不知道为什么。
例如:https : //www.youtube.com/watch?v=xygE8DbwJ7c建议在群集内执行集群内多租户的应用程序,但这种选择对我来说还不够。
azure-kubernetes ×10
azure ×8
kubernetes ×6
azure-aks ×4
azure-cli ×1
azure-devops ×1
cert-manager ×1
gitlab ×1
powershell ×1