使用docker运行一个hello world容器
docker run busybox echo "hello world"
后台模式运行容器
docker run --name kubia-container -p 8080:8080 -d kubia
构建容器镜像(Dockerfile)
docker build -t kubia .
查看本地镜像
docker images
列出运行中的容器
docker ps
交互式在容器中运行shell
docker exec -it kubia-container bash
停止和删除容器
docker stop kubia-container
docker rm kubia-container
镜像打标签和推送
docker tag kubia luksa/kubia
docker login
docker push luksa/kubia
查看容器日志
docker logs
kubectl命令行方式运行pod
kubectl run kubia --image=luksa/kubia --port=8080
创建一个服务
kubectl expose pod kubia <--type=LoadBalancer --name kubia-http> (type指定svc类型默认clusterip,name指定svc名称)
查看资源
kubectl get ... (#-o wide列出pod ip和运行节点 #-o yaml输出格式 #--show-lables列出标签#-L列出指定标签)
kubectl describe ...
查看k8s集群信息
kubectl cluster-info
查看api对象字段
kubectl explain pod
kubectl explain pod.spec
从yaml创建pod
kubectl create -f kubia-manual.yaml
查看日志
kubectl logs
将本地网络端口转发到pod中的端口(错误解决:yum -y install socat)
kubectl port-forward kubia-manual 8888:8080
参考:https://stackoverflow.com/questions/33517646/unable-to-do-port-forwarding-socat-not-found-kubernetes-on-docker
添加和修改标签
kubectl label po
kubectl label po
添加注解
kubectl annotate
删除pod
kubectl delete po
kubectl delete po -l
kubectl delete ns #删除整个命名空间
kubectl delete all --all (删除所有资源)
容器退出状态码
128+9(SIGKILL) 进程强制终止,此时会创建一个全新容器
128+15(SIGTERM)
livenessprobe存活探针设置初始延迟
initalDelaySeconds 设置延迟来说明应用程序启动时间
只删除rc,不删除rc管理的pods
kubectl delete rc kubia --cascade=false
找出节点ip地址
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
认证授权访问api服务器
export CURL_CA_BUNDLE=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
TOKEN=TOKEN" https://kubernetes
赋予所有账户集群管理员权限
kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --group=system:serviceaccounts
1、应用YAML文件创建资源
kubectl apply -f nginx-test.yaml
2、通过YAML文件删除资源
kubectl delete -f nginx-test.yaml #删除YAML文件中定义的资源
3、导出已有的Pod为YAML格式
kubectl get deployment nginx-test -o yaml
4、使用dry-run干跑模式导出YAML
kubectl create deployment test --image=nginx:1.7.9 --dry-run=client -o yaml > nginx.yaml
5、查看api、资源类型
kubectl api-versions #查看K8S所支持API版本
kubectl api-resources #查看K8S所有资源类型
kubectl explain pods #发现api对象字段
kubectl explain pods.spec#了解各个属性更多信息
6、创建和查看资源状态
kubectl apply -f pod-demo.yaml
kubectl get pods #查看容器是否运行,正常情况应该是Running
kubectl get pods -o wide #查看pod详细信息,包含了IP、所属Node等
kubectl get pods --show-labels #查看资源标签
kubectl get pods -L creation_method,env #将creation_method,env标签展示在列表上
kubecl label pods kubia-manual creation_method=manual #添加标签
kubecl label pods kubia-manual env=debug --overwrite #修改标签--overwrite选项
kubectl get namespaces #查看namespace
kubectl get pods -n kube-system #显示指定namespace的pod
7、查看pod详细信息
kubectl describe pods pod-demo
8、删除pod
kubectl delete pods
kubectl delete pods -l
9、查看容器的应用日志
kubectl logs mypod
kubectl logs mypod --previous #查看前一个容器的日志
退出状态码是两个数字的总和:128+x, 其中x是终止进程的信号编号
10使用JSONPath获取节点ip地址:
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
http://kubernetes.io/docs/user-guide/jsonpath
10、服务质量QOS
主要用于Pod调度和驱逐,优先级越低的QOS越容易被驱逐。不同QOS优先级不同,使用kubectl describe命令可以查看Qos Class:
· BestEffort:尽可能的为Pod分配资源,默认不进行requests设置就是该QOS,优先级最低
· Burstable:资源可波动,requests小于limit的值就是该QOS,推荐
· Guaranteed:完全可保障资源,必须使用requests和limit定义内存和CPU两项资源并且相等,优先级最高
10、调度到 一个特定节点
由于每个节点都有 一个唯 一标签 , 其中 键为kubernetes.io/hostname,值为该 节点的 实际主机名
11、添加和修改注解
kubectl annotate pods
----------------------------------------------------
Deployment示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: a.demo.com-deployment
spec:
selector:
matchLabels:
app: a.demo.com
replicas: 2
template:
metadata:
labels:
app: a.demo.com
annotations:
prometheus.io/scrape: "true"
prometheus.io/scheme: "http"
prometheus.io/path: "/actuator/prometheus"
prometheus.io/port: "80"
spec:
containers:
- name: a-demo-com
image: xiaojiaqi/a.demo.com:v2
ports:
- containerPort: 80
env:
- name: SERVER_PORT #变量的名字
value: "80" #变量的值
- name: eureka_client_service-url_defaultZone #变量的名字
value: "http://eureka-demo-com-0.eureka-demo-com-svc.default.svc.cluster.local:8761/eureka/,http://eureka-demo-com-1.eureka-demo-com-svc.default.svc.cluster.local:8761/eureka/,http://eureka-demo-com-2.eureka-demo-com-svc.default.svc.cluster.local:8761/eureka/"
- name: spring_cloud_sentinel_transport_port
value: "8719"
- name: spring_cloud_sentinel_transport_dashboard
value: "sentinel-demo-com-svc.default.svc.cluster.local:8080"
- name: JAVA_OPTIONS
value: "-Xms128m -Xmx128m "
- name: spring_zipkin_base-url
value: "http://zipkin-demo-com-svc.default.svc.cluster.local.:9411"
resources: #资源管理
requests: #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
cpu: 0.1 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
memory: "128Mi" #内存使用量
limits: #资源限制
cpu: 0.5
memory: "256Mi"
livenessProbe: #pod内容器健康检查的设置
httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常
path: /hs #URI地址
port: 80
#host: 127.0.0.1 #主机地址
scheme: HTTP
initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始
timeoutSeconds: 5 #检测的超时时间
periodSeconds: 15 #检查间隔时间