添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

kubectl常用命令

kubectl cluster-info #查看集群信息

kubectl describe pod -n kube-system kube-flannel-ds-amd64-trpqq #查看pod的描述信息

kubectl get pods -n kube-system #查看指定命名空间的pod

kubectl create deployment NAME --image=image [--dry-run] [options] #创建deployment, dry-run为true就是测试不执行

kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP

#为deployment创建service, --name为service的名字, --port为暴露端口, --target-port为目标pod端口

dig -t A nginx.default.svc.cluster.local @10.96.0.10 #验证是否能正确解析service, @后边的ip为k8s的dns地址

kubectl describe svc nginx #描述service

kubectl get pods --show-labels #查看pod的标签

kubectl scale deployment nginx-deploy --replicas=3 #扩容或缩容, --replicas为数量

wget -O - -q nginx-deploy

kubectl rollout undo deployment myapp-deploy --to-revision=1 #回滚到指定版本, 默认回滚到上一版本

kubectl explain pod

资源清单配置

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
  - name: busybox
    image: busybox
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 5"

kubectl create -f test.yaml

kubectl delete -f test.yaml

kubectl describe pod pod-demo

kubectl describe pod pod-demo

kubectl exec -it pod-demo -c myapp -- /bin/sh

https://blog.csdn.net/ucsheep/article/details/81781509

过滤lable

kubectl get pods -l app --show-labels

给pod打标签

kubectl label pods http-7f8cbdf584-dbmkn release=canary

根据label过滤pod

kubectl get pods -l release, app

kubectl get pods -l release=stable, app=myapp

kubectl get pods -l release!=canary

kubectl get pods -l "release in (canary, beta, alpha)"

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo   #name必须小写
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    create-by: tianpei.wang
spec:
  containers:
  - name: myapp
    image: nginx
    ports:
    - name: http
      containerPort: 80
    - name: https
      containerPort: 443
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh", "-c", "sleep 60"]
  nodeSelector:
    kubernetes.io/hostname: node01

liveness存活验证钩子, exec

apiVersion: v1
kind: Pod
metadata:
    name: liveness-exec-pod
    namespace: default
spec:
    containers:
    - name: liveness-exec-containers
      image: busybox:latest
      imagePullPolicy: IfNotPresent
      command: ["/bin/sh","-c","touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 3600"]
      livenessProbe:
          exec:
              command: ["test", "-e", "/tmp/healthy"]
          initialDelaySeconds: 1   #延迟一秒探测
          periodSeconds: 3         #三秒为一个探测周期

liveness存活验证钩子: httpGet

apiVersion: v1
kind: Pod
metadata:
    name: liveness-httpget-pod
    namespace: default
spec:
    containers:
    - name: liveness-httpget-containers
      image: ikubernetes/myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
      - name: http
        containerPort: 80
      livenessProbe:
          httpGet:
              port: http
              path: /index.html
          initialDelaySeconds: 1
          periodSeconds: 3

readiness可用性钩子: httpGet

apiVersion: v1
kind: Pod
metadata:
    name: readiness-httpget-pod
    namespace: default
spec:
    containers:
    - name: readiness-httpget-containers
      image: ikubernetes/myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
      - name: http
        containerPort: 80
      readinessProbe:
          httpGet:
              port: http
              path: /index.html
          initialDelaySeconds: 1
          periodSeconds: 3

lifecycle-poststart错误示例

apiVersion: v1
kind: Pod
metadata:
    name: poststart-pod
    namespace: default
spec:
    containers:
    - name: busybox-httpd
      image: busybox:latest
      imagePullPolicy: IfNotPresent
      lifecycle:
        postStart:
          exec:
            command: ["/bin/sh", "-c", "mkdir -p /data/web/html; echo 'Home Page' >>/data/web/html/index.html"]
      command: ["/bin/httpd"]
      args: ["-f", "-h /data/web/html"]

使用上述yaml创建pod会报错

Warning  FailedPostStartHook  8s (x2 over 26s)  kubelet, node01    Exec lifecycle hook ([/bin/sh -c mkdir -p /data/web/html; echo 'Home Page' >>/data/web/html/index.html]) for Container "busybox-httpd" in Pod "poststart-pod_default(92846bc9-ca3f-11e9-9c47-0242ac110046)" failed - error: command '/bin/sh -c mkdir -p /data/web/html; echo 'Home Page' >>/data/web/html/index.html' exited with 126: , message: "cannot exec in a stopped state: unknown\r\n"

原因是由于,优先去执行containers下的command, 然后才会去执行lifecycle下的command, 所以导致/data/web/html目录还未创建

转载于:https://www.cnblogs.com/peitianwang/p/11409889.html

原文链接: http://www.cnblogs.com/peitianwang/p/11409889.html 自主式 Pod 资源 资源的清单格式 一级字段:apiVersion (group/version),kind,metadata(name,namespace,labels,annotatinos,....),spec ,status(只读) Pod 资源: spec.containers <[]object> kubectl explain pod s.spe... 今天学习Linux,通过yum安装Docker时,在最后的测试阶段产生了一个错误,如图: 我是根据Docker官网的安装教程进行的。使用的是阿里云服务器。Docker官网地址:https://docs.docker.com/engine/install/centos/ 解决方案: 在Xshell中 执行 命令:yum install -y libseccomp-devel 再次运行hello-world 映像:安装 成功 在Deployment的YAML定义文件中,由spec.strategy.type字段指定 Pod 的滚动更新策略,它有两个可选值: RollingUpdate (默认值):逐步创建新的 Pod ,同时逐步终止旧 Pod ,用新 Pod 替换旧 Pod 。 Recreate:在创建新 Pod 前,所有旧P 2、初始化容器(initContainers):一个 Pod 可以定义任意个初始化容器,如上图就定义了两个初始化容器,初始化会按照YAML清单中顺序 执行 ,当最后一个初始化容器 执行 成功 后,才会去启动主容器。来定义初始化容器,可以定义多个初始化容器,会按照顺序一次 执行 执行 完成后依次关闭初始化容器。实例:定义 Pod 资源,创建两个初始化容器,初始化容器 执行 sleep 2,也就是说我们要等定义的两个初始化容器都睡眠2秒后,才创建主容器。实例:创建 Pod 定义停止 钩子 ,在容器停止前,优雅的关闭容器内服务。 开始回调 钩子 (postStart)里面有如下 种方式: exec : 执行 命令, 执行 的结果如果返回值不为0即为失败(注:exec下面 执行 的命令,必须为当前容器内支持的命令) tcpsocket :探测端口,探测的端口 公司使用docker单节点方式部署rancher,利用rancehr来操作 k8s 集群,有一天要访问rancher ui时,发现打不开,然后部署的所有容器也都不能使用,立马到服务器上查看情况,发现rancher容器还在,然后尝试进入容器时,报了错cannot exec in a stopped state: unknown,然后尝试查看rancher日志,发现可以查看 E0712 15:47:03.730752 6 reflector.go:307] github.com/rancher/norm 这是我在进入docker拉取的mongo时报的错! **然后查看启动日志! $ docker logs --tail 50 --follow --timestamps mymongo #mymongo是我的容器名称 用 sudo docker ps查看信息 利用该串字符进入以创建的容器中 sudo docker exec -it 0e12e757afd0 /bin/bash 依旧不行!!! 只好另寻它法!!! 经定位需要关闭selinux,使用如下命令关闭 $ echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://f2d6cb40.m.daocloud.io\"" | sudo tee -a /etc/default/docker 导致docker无法启动 sudo servic... 对于大规模集群而言,如何在进行服务升级的同时保持 可用性 一直是一个难点。 作为 Pod 副本管理控制器,Deployment可以配置 Pod 发布和更新方式,保证在 Pod 升级过程中不存在 Pod 不可用的问题。 如果 Pod 是在Deployment上创建的,只需要在运行时修改Deployment的 Pod 定义或者镜像名称,并应用到Deploy... 我们知道, K8S 可以在应用容器启动之前先 执行 一些预定义的操作,比如事先生成一些数据,以便于应用容器在启动的时候使用。这种方式可以通过init container技术实现,具体可以参考《Kubernetes init container》。 那么事实上,在实际生产中,还有一种需求,就是我们需要在应用容器启动后 执行 一些初始化操作,比如设置容器的dns参数等,说到这里就不得不多提一句, k8s 到目前...