k8s笔记
1.所有pod都在同一个共享网络地址空间中,每个pod都可以直接访问其他pod的IP进行访问
2.一个pod中的容器运行于相同的Network命名空间,共享相同的IP地址和端口,同一pod中的容器运行的多个进行要注意不能绑定到相同的端口
3.每个pod都有独立的IP和端口
4.
kubectl run kubia --image=luksa/kubia --port=8080 --generator=run/v1 replicationcontroller "kubia ” created
创建loadbalancer类型服务
kubectl expose re kubia --type=LoadBalancer --name kubia-http service ”kubia - http " exposed
kubectl get #列出所有类型资源
kubectl get pods
kubectl get pods -o wide
kubectl describ pod kubia-hczji #获取pod的详细信息
kubectl get services/svc
kubectl get replicationcontrollers/rc
kubectl scale rc kubia --replicas=3 #名为kubia的rc增加副本数到3个
#使用yaml文件创建pod
kuberctl create -f kubia-manual.yaml #从yaml文件创建pod
kubectl get po kubia-manual -o yaml/json #查看pod的yaml或json信息
kubectl get po --show-labels #获取pod标签
kubectl get po -L label01,label02 #只获取特定标签内容
kuberctl logs kubia-manual #查看pod日志
kuberctl logs kubia-manual -c kubia #获取kubia-manual pod中kubia容器的日志
每天或者每次日志文件达到10MB大小时, 容器日志都会自动轮替。kubectl logs命令仅显示最后一次轮替后的日志条目
kubectl logs mypod --previours #查看前一个容器的日志
kubectrl port-forward kubia-manual 8888:8080 #将机器的本地端口8888转发到pod的8080端口,访问:curl localhost:8888
pod.yaml内容:
apiVersion: vl
kind: Pod
metadata:
name: kubia-manual-v2
labels: #设置pod的标签
creation method: manual
env: prod
spec:
containers:
- image: luksa/kubia
name: kubia
ports:
- containerPort: 8080
protocol: TCP
kubectl label po kubia-manual creation_method=manual #为pod kubia-manual添加creation_method=manual 标签
kubectl label po kubia-manual-v2 env=debug --overwrite #修改env=test为env=debug
kubectl get po -l creation_method=manual #或者 !=、env in 、env notin
kubectl get po -l env #列出含有env标签的所有pod
kubectl get po -l ‘!env’ #列出不含有env标签的所有pod
kubectl get po -l app=pc,rel=beat #标签选择器使用多个条件
命名空间:
具有相同名称的pod可以位于不同的namespace中
kubectl get ns
kubectl get po --namespace(或-n) kube-system
kubectl create namespace custom-namespace #新建命名空间
kubectl create -f kubia-manual.yaml -n custom-namespace #在命名空间内新建pod
如果不指定命名空间, kubect 将在当前上下文中配置的默认命名空间中执行操作 。而当前上下文的命名空间和当前上下文本身都可以通过 kubectl config 命令进行更改
kubectl delete po pod1 pod2 #删除多个pod
kubectl delete po -l creation_method=manual #通过标签选择器删除pod
RC存活探针:
spec:
containers:
- image: luksa/kubia-unhealthy
name: kubia
livenessProbe: #在8080端口上执行http get请求,检查容器是否健康
httpGet:
path: /
port: 8080
initialDelaySeconds: 20 #容器启动后等待20s后再探测
kubectl scale rc kubia --replicas=10 #更改rc副本为10
kubectl edit rc kubia #编辑rc kubia yaml文件,修改spec.replicas=10也可以
kubectl delete rc kubia --cascade=false #删除rc,不影响其管理的pod运行。删除rc后,这些pod将独立运行,不再受管理,但可以使用合适的标签选择器创建新的rc,重新进行管理
kubectl get rs
kubectl describe rs
rs.yaml文件编写:
selector:
matchExpressions: #此选择器要求该pod包含名为“app”的标签,值必须是 kubia
- key: app
operator: In
values:
- kubia
• In : Label的值 必须与其中 一个指定的values 匹配。
• Notln : Label的值与任何指定的values 不匹配。
• Exists : pod 必须包含一个指定名称的标签(值不重要)。使用此运算符时,不应指定 values字段。
• DoesNotExist : pod不得包含有指定名称的标签。values属性不得指定 。
如果你 指定了多个表达式,则所有这些表达式都必须为true才能使选择器与pod匹配。如果同时指定matchLabels和matchExpressions, 则所有标签都必须匹配,并且所有表达式必须计算为true以使该pod与选择器匹配
DaemonSet可以指定pod在每个节点(或特定节点)上运行
Job适合用任务成功完成后退出,而不是永久运行
Job可以配置为pod串行运行5次,或10个pod并行运行
Job运行时间也可以进行限制
CronJob支持任务计划方式运行pod,CronJob资源会创建Job资源,然后job创建pod