容器应用,  系统运维

k8s命令总结

  1. kubectl命令就是apiserver的客户端工具,可以实现对nodes资源的增删改查.
# 描述一个节点的信息

kubectl describe node k8s-node1

# 查看k8s集群信息

kubectl cluster-info

# 创建并运行pod

# --image:表示docker官网的镜像名称

# --replicas:表示创建并启动几个Pod,不写默认就是1个

# --dry-run:表示并不真正执行,去掉这个参数就会启动pod

kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1

kubectl run --generator=deployment/apps.v1 # 被强烈反对并且将来会移除这个参数,可以使用:

kubectl run --generator=run-pod/v1 or kubectl create instead

kubectl get deployment

# 1/1表示这个pod里面有一个容器,并且都准备好了,RESTARTs=0表示没有被重启过

kubectl get pod

kubectl get pods -o wide

NAME                            READY   STATUS    RESTARTS   AGE     IP           NODE

nginx-deploy-84cbfc56b6-w9n4j   1/1     Running   0          4h26m   10.244.2.2   k8s-node2

# 可以看到nginx在node2节点上运行着,ip地址是10.244.2.2,使用的是node2节点上cni0的地址

# 在集群内均可访问这个地址,k8s之外是无法访问

curl -I 10.244.2.2

# 删除pod,控制器管理pod,删除正在运行的pod,控制器会马上再创建一个新的

kubectl delete pods nginx-deploy-84cbfc56b6-w9n4j
  1. 发布端口
# 缩写:pod(po),service(svc),replicationcontroller(rc),deployment(deploy),replicaset(rs)

# 起名时注意:以小写字母、数字、字符或'-'组成,不能有下划线

# 给这个控制器下的pod创建一个service,名字叫my-nginx

# service的端口(--port)是80,映射到nginx-deploy pod的端口(--target-port)端口是80

kubectl expose deployment nginx-deploy --name=my-nginx --port=80 --target-port=80 --protocol=TCP

kubectl get svc

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE

kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   7d11h

my-nginx     ClusterIP   10.111.172.213   <none>        80/TCP    31s

# service生成iptables访问规则,把cluster ip对应的地址和port都调度至标签选择器关联到的各pod端

kubectl describe svc my-nginx

Name:              my-nginx

Namespace:         default

Labels:            run=nginx-deploy # 哪个pod是这个标签,my-nginx就会映射到这个pod上

Annotations:       <none>

Selector:          run=nginx-deploy

Type:              ClusterIP

IP:                10.111.172.213

Port:              <unset>  80/TCP

TargetPort:        80/TCP

Endpoints:         10.244.2.2:80 # 结束点:具体到pod

Session Affinity:  None

Events:            <none>

# 查看各pod的标签

kubectl get pods --show-labels
  1. DNS解析
 查看coredns

kubectl get pods -n kube-system -o wide | grep coredns

kubectl get svc -n kube-system

NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE

kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP   7d16h

yum -y install bind-utils

# 起一个busybox,查找完整域名

kubectl run client --image=busybox --replicas=1 -it --restart=Never

If you don't see a command prompt, try pressing enter.

/ # cat /etc/resolv.conf

nameserver 10.96.0.10

search default.svc.cluster.local svc.cluster.local cluster.local

options ndots:5

# 使用集群内部DNS解析my-nginx的域名

dig -t A my-nginx.default.svc.cluster.local @10.96.0.10

my-nginx.default.svc.cluster.local. 5 IN A  10.111.172.213

# service用于为pod提供固定访问入口,所以不管pod怎么变,svc实现了"一次创建,永久使用"

# 在刚才那个busybox中可以使用域名访问到nginx

wget -O - -q my-nginx
  1. 动态升级;手动修改svc的参数
# 控制器deployment也是通过标签选择器来管理Pod的

kubectl describe deployment nginx-deploy

# 动态修改replicas副本的数量

kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2

kubectl get deployment -w # 监控,不会退出

# 动态扩展副本数量为5个

kubectl scale --replicas=5 deployment myapp

# 缩减为3个

kubectl scale --replicas=3 deployment myapp

# 创建service

kubectl expose deployment myapp --name=svc-myapp --port=80

# 在busybox内部访问svc-myapp,可看到轮询的效果

wget -O - -q svc-myapp/hostname.html

# 可以看到这个pod中的容器名为myapp

kubectl describe pods myapp-9b4987d5-9sxgs

# 动态升级pod版本,第一个myapp是控制器名,第二个myapp是该控制器下的pod的容器名

kubectl set image deployment myapp myapp=ikubernetes/myapp:v2

# 动态查看更新状态

kubectl rollout status deployment myapp

# 回滚pod至指定版本,不指定版本表示回滚到上一个版本

kubectl rollout undo deployment myapp:v1

# 在iptables中可看到service就是一条规则

iptables -vnL -t nat

# 想要在集群外部访问pod,把type: ClusterIP改成NodePort

kubectl edit svc svc-myapp

kubectl get svc

NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE

kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        7d17h

svc-myapp    NodePort    10.102.101.70 <none>        80:30515/TCP   2h

留言

您的电子邮箱地址不会被公开。 必填项已用*标注

闽ICP备20008591号-1