我希望从本地计算机访问 Kubernetes API。我正在尝试使用 kubernetes Rest API 获取 pod 列表。
我在Google Cloud上创建了一个 kubernetes 集群和一些 pod 。
在我的本地 Windows 计算机上,我安装了 gcloud sdk 和 kubectl 组件。我使用以下方式连接到我的集群:
gcloud container clusters get-credentials my-cluster --region us-central1 --project my-project
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令获取 pod 列表kubectl get pods
不过,我想使用 kubernetes Rest API 获取 pod 列表。
GET https://kubernetes.default/api/v1/namespaces/default/pods
Authorization: Bearer my_access_token
Run Code Online (Sandbox Code Playgroud)
但我认为该请求没有得到通过。
在邮递员中,我收到错误:
Error: tunneling socket could not be established, cause=socket hang up
或者在 Python 中使用 requests 库(来自我的本地计算机),我收到错误
HTTPSConnectionPool(host='kubernetes.default', port=443): Max retries exceeded with url: /api/v1/namespaces/default/pods (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection …
google-cloud-platform kubernetes google-kubernetes-engine kubectl
我希望每次创建带有标签latestKubernetes 的新映像时都会自动拉取新映像。我添加imagePullPolicy: Always了 pod 规范,但它不会用新图像更新旧图像。
apiVersion: apps/v1
kind: Deployment
metadata:
name: node
namespace: dev
labels:
app: my-node-app
spec:
replicas: 2
selector:
matchLabels:
app: my-node-app
template:
metadata:
labels:
app: my-node-app
spec:
hostNetwork: true
securityContext:
fsGroup: 1000
containers:
- name: node
imagePullPolicy: Always
image: gcr.io/my-repo/my-node-app:latest
ports:
- containerPort: 3000
envFrom:
- configMapRef:
name: my-configmap
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 2
memory: 8Gi
restartPolicy: Always
Run Code Online (Sandbox Code Playgroud) 嘿,我有一个更广泛的问题,因为当我在 kubernetes 中更新秘密时,它们不会在 pod 中实现,除非它们是 ugprades/reschedules 或只是重新部署;我看到了另一篇关于它的 stackoverflow 帖子,但没有一个解决方案适合我更新 kubernetes 的秘密不会更新正在运行的容器环境变量
同样如此,pod 上的 python 脚本的应用程序内解决方案可以自动更新其秘密https://medium.com/analytics-vidhya/updating-secrets-from-a-kubernetes-pod-f3c7df51770d但它似乎是一个远景和我想出了向部署清单添加注释的解决方案 - 并希望每次舵图将新的时间戳放入其中时,它都会重新安排 Pod - 它确实放置了它,但它没有重新安排 - 任何想法如何强制这种行为?
apiVersion: apps/v1
kind: Deployment
metadata:
name: xxx
namespace: xxx
labels: xxx
annotations:
lastUpdate: {{ now }}
Run Code Online (Sandbox Code Playgroud)
我也不想将这个补丁命令添加到 ci/cd 部署中,因为它的仲裁和 - 感觉不是正确的解决方案
kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'
Run Code Online (Sandbox Code Playgroud)
没有其他人找到更好的解决方案来在已更改的机密上重新部署 pod 吗?
下午好
我有两个 Pod 由于以下错误而无法提升:
prometheus-k8s-0 0/3 Pending 0 56s
prometheus-k8s-1 2/3 Running 0 69s
Run Code Online (Sandbox Code Playgroud)
Warning FailedScheduling <unknown> default-scheduler 0/4 nodes are available: 1 node (s) had taint {node.kubernetes.io/memory-pressure:}, that the pod didn't tolerate, 3 node (s) had volume node affinity conflict。
kubectl describe nodes aks-bbagentpool-39730754-vmss000000 | grep -i taint
Taints: node.kubernetes.io/memory-pressure:NoSchedule
Run Code Online (Sandbox Code Playgroud)
我没有看到任何节点的高消耗:
kubectl top nodes
NAME CPU (cores) CPU% MEMORY (bytes) MEMORY%
aks-bbagentpool-39730754-vmss000000 153m 8% 920Mi 17%
aks-bbagentpool-39730754-vmss000001 1854m 97% 5357Mi 99%
aks-bbinfra-39730754-vmss000000 211m 5% 2038Mi 16%
aks-bbinfra-39730754-vmss000001 111m …Run Code Online (Sandbox Code Playgroud) 当我们启动主主节点时,该节点会使用 ttl 为工作节点和主节点创建令牌。
根据文档kubeadm token(我也测试过并且它有效),我们可以发出命令并获取新令牌(默认为 ttl 24h):
kubeadm token create --print-join-command
Run Code Online (Sandbox Code Playgroud)
我想弄清楚是否要添加新的平面节点(辅助主节点),如何创建相关令牌?
我尝试传递一些标志,例如:
kubeadm token create --print-join-command --control-plane
Run Code Online (Sandbox Code Playgroud)
但它失败了(当然),因为这个标志不被识别。
我还通过文档发现,我们可以通过配置文件的直接链接来实现,例如 ref kubeadm-join/file 或基于 https 的发现:
kubeadm join --discovery-file path/to/file.conf # (local file)
kubeadm join --discovery-file https://url/file.conf # (remote HTTPS URL)
Run Code Online (Sandbox Code Playgroud)
就我而言,我没有本地 conf 文件或计划使用 url 链接。
有没有其他方法可以使用平面节点而不是工作节点的命令来创建新令牌?
我可以按照以下指南登录到单个容器 pod
https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/
和
kubectl exec --stdin --tty $POD_API -- /bin/bash
Run Code Online (Sandbox Code Playgroud)
其中 $POD_API=api-79c8g4948d-24vth [或任何 kubernetes 分配给它的]
但是,我有一个带有 2 个容器的 pod [一个是 cloudsql 代理,另一个是 api]。
如何登录我的 api 容器?我的 api 容器名为:api,而 cloudsql 代理名为 cloudsql-proxy。
我只需要使用 Helm 图表“ingress-nginx”将 nginx-ingress 控制器部署到 kubernetes 主节点。它提供了一个选项“controller.nodeSelector”来选择要部署的 k8s 节点。所以我想使用此选项来选择带有 label 的 k8s 主节点node-role.kubernetes.io/master=,但尝试了不同的格式,无法让它按预期工作。
失败案例:
helm install --set controller.hostNetwork=true --set controller.hostPort.enabled=true --set controller.extraArgs.enable-ssl-passthrough="" --set controller.replicaCount=1 --set controller.nodeSelector."node-role\.kubernetes\.io/master"="" --namespace rwe ingress-nginx ingress-nginx/ingress-nginx
Run Code Online (Sandbox Code Playgroud)
您能帮忙建议如何让这个选项生效吗?谢谢。
能够使用 CLI 在 Kubernetes 集群中创建作业 ( https://kubernetesbyexample.com/jobs/ )
有没有办法使用 Java API 在集群内创建作业?
import time
import asyncio
import aiohttp
async def is_name_available(s, name):
async with s.get("https://twitter.com/%s" % name) as res:
if res.raise_for_status == 404:
print('%s is available!' % name)
return name
async def check_all_names(names):
async with aiohttp.ClientSession(raise_for_status=True) as s:
tasks = []
for name in names:
task = asyncio.create_task(is_name_available(s, name))
tasks.append(task)
return await asyncio.gather(*tasks)
def main():
with open('names.txt') as in_file, open('available.txt', 'w') as out_file:
names = [name.strip() for name in in_file]
start_time = time.time()
results = asyncio.get_event_loop().run_until_complete(check_all_names(names))
results = [i for i in …Run Code Online (Sandbox Code Playgroud)