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