基本kubectl命令
kubectl get svc -A #查看所有的service,不推荐,类似于sql中select * kubectl get pod -n default #查询指定namespace下的pod,推荐写法 kubectl get deployment -n kube-system #查看控制器 kubectl describe nodes #查看容器运行信息 cpu 100m (5%) 100m (5%) #表示分出去了0.1核cpu,1000m=1核 #进入指定pod kubectl exec -it pod名称 -n namespace -c 指定容器名 -- /bin/sh #删除pod kubectl delete pods/pod名称 namespace/namespace名称 #直接编辑资源 kubectl edit namespace名称 #有些不支持修改,比如名称 #创建pod kubectl create -f yml文件 不能创建已有的,但apply可以允许执行多次还可以完成修改操作 #使用jq命令来查看json内容 yum install epel-release yum install jq #安装jq kubectl get --raw /api/v1/namespaces/ | jq .kind #查看节点信息 kubectl get nodes/k8s-node1 -o yaml/wide #获取节点状态 kubectl get leases -n kube-node-lease #传统的健康检查需要传递镜像信息极大占用了网络资源,节点租约在kube-node-lease里面,只需要#上传节点状态,kubelet每10s获取状态但不上报,只有超过默认5分钟或者发生变动才会上报 kubectl get leases/k8s-node1 -o yaml -n kube-node-lease
常用etcd命令
#查看etcd节点状态
export NODE_IPS="192.168.74.144 192.168.74.145 192.168.74.146"
for ip in ${NODE_IPS};do ETCDCTL_API=3 /usr/local/bin/etcdctl --write-out=table endpoint status --endpoints=https://${ip}:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem;done
#etcd节点查看
etcdctl member list
#检查心跳
etcdctl endpoint health
#获取etcd中所有数据
etcdctl get / --prefix --keys-only
#通过etcd删除pod
etcdctl get / --prefix --keys-only | grep nginx
/calico/resources/v3/projectcalico.org/workloadendpoints/linux66/kube--node--1-k8s-linux66--nginx--deployment--7d8d8dcdf4--6ql2j-eth0
/registry/deployments/linux66/linux66-nginx-deployment
/registry/endpointslices/linux66/linux66-nginx-service-xf62s
/registry/pods/linux66/linux66-nginx-deployment-7d8d8dcdf4-6ql2j
/registry/replicasets/linux66/linux66-nginx-deployment-7d8d8dcdf4
/registry/services/endpoints/linux66/linux66-nginx-service
/registry/services/specs/linux66/linux66-nginx-service
etcdctl del /registry/pods/linux66/linux66-nginx-deployment-7d8d8dcdf4-6ql2j
k8s域名解析流程
k8s里面有4种DNS策略, 而coredns使用的DNS策略就是Default, 这个策略的意思就是继承宿主机上的/etc/resolve.conf, 所以coredns Pod 里面的/etc/resolve.conf 的内容就是宿主机上的内容。
所以对于dnsPolicy 默认(也就是ClusterFirst)的情况下,Pod DNS的查询链路如下:
基本yaml格式
cat tomcat.yaml
kind: Deployment #指定类型 Deployment、Pod、Service等
#apiVersion: extensions/v1beta1
apiVersion: apps/v1 #指定类型版本,通过命令kubectl api-resources kubectl api-version查看版本,1.18版本前是extensions/v1beta1
metadata: #pod的元数据信息,用来定义资源对象的属性信息
labels: #自定义pod的标签
app: linux66-tomcat-app1-deployment-label #标签名称为app值为linux36-nginx-deployment-label,用于后期筛选,给deployment用
name: linux66-tomcat-app1-deployment #pod名称,不能重复
namespace: linux66 #所属namespace,默认defaults
spec: #定义deployment中容器的详细信息
replicas: 1 #副本数,默认1
selector: #用于筛选匹配的标签,key是app,值是linux66-tomcat-app1-selector,控制副本数,匹配不到副本数为1,匹配到两个会删除一个,保证副本数为1
matchLabels: #定义匹配的标签,必须要设置
app: linux66-tomcat-app1-selector #要匹配的标签
template: #定义模板,必须定义,模板是起到描述要创建的pod的作用
metadata:
labels:
app: linux66-tomcat-app1-selector #该模板创建的容器都会继承这个标签
spec:
containers:#定义pod中容器列表,可以多个至少一个,pod不能动态增减容器
- name: linux66-tomcat-app1-container #容器名称
image: tomcat:7.0.94-alpine
#command: ["/apps/tomcat/bin/run_tomcat.sh"]
#imagePullPolicy: IfNotPresent
imagePullPolicy: Always #拉取策略,IfNotPresent、Always、Never
ports:#声明配置,不是最终决定
- containerPort: 8080
protocol: TCP #TCP,UDP,SCTP
name: http
env: #容器环境变量=虚拟机env,传递数据库密码,IP
- name: "password"
value: "123456"
- name: "age"
value: "18"
resources:#定义资源限制,最多一核cpu和150m内存
limits:
cpu: 1
memory: "150Mi"
requests:
cpu: 300m
memory: "100Mi"
---
kind: Service#暴露容器中服务,给k8s以外的服务访问。kubectl get ep -A如果有IP service能够匹配到容器
apiVersion: v1
metadata:
labels:
app: linux66-tomcat-app1-service-label
name: linux66-tomcat-app1-service
namespace: linux66 #与Pod在同一个service
spec:
#type: NodePort #NodePort,ClusterIP(默认),LoadBalancer,ExternalName
ports: #真正端口转发,不指定,在K8S集群端口范围内随机分配
- name: http
port: 80 #监听端口
protocol: TCP
targetPort: 8080 #容器服务端口
#nodePort: 40003 #宿主机端口,请求-nodePort-port-targetPort-服务
selector:
app: linux66-tomcat-app1-selector#将流量路到选择的pod上,须等于Deployment.spec.selector.matchLabels



