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
  
  到目前...