Skip to content
  1. 常用命令
shell
kubectl [command ]   [type]   [name]  [flags]
command:
  create 
  get
  describe
  delete
type:
  pod
  pods

  name  

eg:
 kubectl get pods ,svc
 kubectl --help
 kubectl create deployment  nginx --image=nginx 
 kubectl expose deployment  nginx  --port=80 --type=NodePort
 kubectl get nodes
 kubectl apply -f *.yml
 kubectl api-versions
  kubectl api-resources
   -- 生成 yml 
   
    kubectl create deployment  web  --image=nginx  -o yaml --dry-run

    kubectl get deploy nginx  -o=yaml --export > m2.yml

  # 给节点打标签  
   kubectl label  node node1  env_role=dev 
   kubectl get  nodes   --show-labels

   kubectl get pods -o wide

  #  污点
   kubectl describe node  master |grep  Taint
  kubectl  taint  node [node]  key=val
  #  删除pod
  kubectl delete deployment web


  kubectl  get secret


  # 创建命名空间
  kubectl  create namespace idms;
#  查看 命名空间
  kubectl get  ns   ;


  kubectl   get role;
plsql
# 列出所有不同的资源对象,默认default空间
kubectl get all
# 查看defalut空间下的所有资源 
kubectl get all -n default
# 列出所有节点
kubectl get nodes
# 列出所有节点及详情
kubectl get nodes -o wide 
# 实时查看
kubectl get pods -o wide -w
# 列出所有节点详情及标签信息
kubectl get nodes -o wide --show-labels
# 列出所有命名空间下运行的Pod信息
kubectl get pods --all-namespaces
# 列出所有运行的Pod信息
kubectl get pods
# 列出所有运行的Pod信息及详情
kubectl get pods -o wide
# 列出所有的命令空间
kubectl get namespace
# 列出所有replication controllers和service信息
kubectl get rc,services
# 查看test下的service资源,Cluster IP,Service的直接IP地址,此为虚拟IP地址。外部网络无法ping通,只有kubernetes集群内部访问使用。
kubectl get svc -n test

image.png

plsql
# 从文件或标准输入创建资源,接受JSON和YAML格式。
kubectl create -f FILENAME
# 根据aaa.text创建一个名为my-config的configmap
kubectl create configmap my-config --from-file=/root/aaa.text
# 创建一个名为test-namespace的命名空间,可缩写为ns
kubectl create namespace test-namespace
# 在test命名空间下,创建一个名为test-nginx的deployment资源
kubectl create deployment test-nginx --image=daocloud.io/library/nginx:1.7.11  -n test
plsql
# 语法
run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]
# 在test-namespace命名空间下创建nginx,执行端口88,副本数为2
kubectl run nginx --image=daocloud.io/library/nginx:1.7.11 --port= 88 --replicas=2 --env="POD_NAMESPACE=test-namespace"
plsql
# 语法
$ delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])
# 使用nginx-test.yml中指定的资源类型和名称删除pod
kubectl delete -f ./nginx-test.yml
# 删除一个pod
kubectl delete pod test-nginx-cc44fcc54-hhfgv -n test
# 删除所有的pod
kubectl delete pods --all
# 删除命名空间
kubectl delete namespace test-namespace
plsql
# 语法
kubectl describe TYPE NAME_PREFIX
# 查看名为test-nginx的详细信息
kubectl describe deployment test-nginx -n test
# 查看名为test-nginx的svc的详细信息
kubectl describe svc test-nginx -n test
# deployment名称
Name:                   test-nginx 
# 所属命名空间
Namespace:              test
# 创建时间
CreationTimestamp:      Mon, 02 Nov 2020 22:21:59 +0800
# 标签,此处是默认添加,Label具有严格的命名规则,它定义的是Kubernetes对象的元数据(Metadata),并且用于Label Selector。
Labels:                 app=test-nginx
# Annotation则是用户任意定义的“附加”信息,以便于外部工具进行查找。
Annotations:            deployment.kubernetes.io/revision: 1
# 标签选择器,Kubernetes核心的分组机制,通过label selector客户端/用户能够识别一组有共同特征或属性的资源对象
Selector:               app=test-nginx
# 副本数 期望1,已更新1,总计1个,1个可用,0个不可用
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
# 更新策略-滚动更新(重建(recreate)/滚动更新(rolling-update)蓝绿(blue/green)金丝雀(canary)A/B测(a/b testing))
StrategyType:           RollingUpdate
# 升级等待时间
MinReadySeconds:        0
# 滚动更新策略,unavailable升级过程中最多有多少个POD处于无法提供服务的状态,surge升级过程中最多可以比原先设置多出的POD数量
RollingUpdateStrategy:  25% max unavailable, 25% max surge
# pod模板
Pod Template:
  标签
  Labels:  app=test-nginx
  容器
  Containers:
   容器nginx
   nginx:
    镜像地址
    Image:        daocloud.io/library/nginx:1.7.11
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   test-nginx-cc44fcc54 (1/1 replicas created)
# 事件
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled up replica set test-nginx-cc44fcc54 to 1
plsql
# 语法
kubectl exec POD [-c CONTAINER] -- COMMAND [args...]
# 
kubectl exec -it  podName -c cName /bin/bash -n test
plsql
# 语法
expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]
# 为deployment的test-nginx创建service,并通过Service的80端口转发至容器的80端口上,service接入点不变
kubectl expose deployment test-nginx --port=80 --target-port=80  -n test
plsql
# 语法
scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
# 扩容test-nginx为2份
kubectl scale deployment test-nginx --replicas=2 -n test
shell
#namespace   和nacos 的 namespace
名称空间   隔离资源  不隔离网络
##  查看 所有名称空间的 pod
kubectl  get  pods -A
# 查看 指定名称空间的 pod
kubectl  get  pods -n kube-system

# 创建 pod
 kubectl run  mynginx  --image=nginx --port=80
kubectl describe pod mynginx
kubectl delete -f pod.yml
kubectl logs  mynginx
kubectl  exec -it mynginx -n idms -- /bin/bash
shell
apiVersion: v1
kind: Namespace
metadata:
  name: hello
shell
apiVersion: v1
kind: Pod
metadata:
#  pod 的名字
  name: mynginx
#   指定命名空间   可选
  namespace: idms
  labels:
    run: mynginx

spec:
  containers:
    - image: nginx
      name: mynginx



#    kubectl run  mynginx  --image=nginx --port=80
#     kubectl describe pod mynginx
#     kubectl describe pod mynginx  -n  idms
#  kubectl delete -f pod.yml
#  kubectl logs  mynginx
#  kubectl  exec -it mynginx -n idms -- /bin/bash
shell
apiVersion: v1
kind: Pod
metadata:
#  pod 的名字
  name: mypod
#   指定命名空间   可选

spec:
  containers:
    - image: nginx
      name: mynginx
    - image: tomcat
      name: tomcat



#    kubectl run  mynginx  --image=nginx --port=80
#     kubectl describe pod mynginx
#     kubectl describe pod mynginx  -n  idms
#  kubectl delete -f pod.yml
#  kubectl logs  mynginx
#  kubectl  exec -it mynginx -n idms -- /bin/bash

dashboard 搭建

shell
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: admin-user
    namespace: kubernetes-dashboard

#  kubectl get secret -n kube-system|grep admin|awk '{print $1}'
#  kubectl describe secret dashboard-admin-token-86qqf -n kube-system|awk '/^token/ {print $2}'

#  kubectl -n  kubernetes-dashboard get secret  $(kubectl -n  kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o  go-template='{{.data.token | base64decode}}'

kubectl apply -f dash.yml 执行命令 创建pod

shell
kubectl edit svc  kubernetes-dashboard  -n kubernetes-dashboard

type修改为 NodePort 
kubectl get svc -A | grep kubernetes-dashboard

通过命令获得token 登录

shell
kubectl -n  kubernetes-dashboard get secret  $(kubectl -n  kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o  go-template='{{.data.token | base64decode}}'

delpoy

shell
# 创建一次部署
kubectl create deployment mynginx --image=nginx:1.14
# 删除部署
kubectl delete deploy  mynginx
# 删除pod   deployment 具备自愈性   会重新创建新的pod
# kubectl delete pod  mynignx-001
# 多副本  1.19 版本可以用
kubectl create deployment mynginx --image=nginx:1.14 --replicas=2
#  通过yml 部署
 kubectl create -f repla.yml

#  扩容  缩容  --replicas = 总的容量
kubectl scale deploy/mynginx   --replicas=8

# 滚动升级
kubectl  set image  deploy/mynginx  nginx=nginx:1.16 --record
#  回退
# 查看版本记录
kubectl rollout history  deploy/mynginx
## 查看版本记录指定版本
kubectl rollout history  deploy/mynginx --revision=2
##  回滚到上次
kubectl rollout undo deploy/mynginx 
##  指定版本号回退

   kubectl rollout undo deploy/mynginx  --to-revision=3
shell
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mynginx
  name: mynginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mynginx
  template:
    metadata:
      labels:
        app: mynginx
    spec:
      containers:
        - image: nginx
          name: mynginx
shell
#  将多个pod   组成一个对外发布服务    实现了 服务发现和负载均衡   


kubectl expose deploy mynginx  --port=8000 --target-port=80
# kubectl expose deploy mynginx  --port=8000 --target-port=80 --type=NodePort

#  通过 service  访问 多台机器
#   服务名.名称空间.svc
# mynginx.default.svc
# mynginx.default.svc:8000

#配置文件方式

apiVersion: v1
kind: Service
metadata:
  name: mynginx
  labels:
    app: mynginx
spec:
  selector:
    app: mynginx
  ports:
    - port: 8000
      targetPort: 80
      protocol: TCP


# kubectl get  pod -l app=mynginx

每一个pod中都包含若干个 容器 和一个父容器 父容器主要负责监控 和网络

image.png

python
#  查询 pod  可以配置的属性和清单
kubectl explain pod 
kubectl explain pod.metadata

kubectl  api-versions

image.png pod 的创建过程 image.pngimage.png

image.png 重启策略 image.png

pod 的调度 由 Scheduler组件 采用相应的算法实现的 四大调度规则: 自动调度 默认的 定向调度 通过NodeName 配置 调度到指定的机器

python
apiVersion: v1
kind: Pod
metadata:
  name: mynginx
spec:



#  通过 nodeName 指定节点名称 定向调度

  nodeName: node1

  containers:
    - image: nginx  #   镜像名称
      name: mynginx   # 容器名称
      imagePullPolicy:  never
   nodeSelector
python
#先给 节点node 打标签
kubectl label  nodes  node1 node-env=dev
----------------------------------------------
通过 nodeSelector 选择节点

apiVersion: v1
kind: Pod
metadata:
  name: mynginx
spec:



#  通过 nodeName 指定节点名称 定向调度

#  nodeName: node1
  nodeSelector:
    node-env:  dev
  containers:
    - image: nginx  #   镜像名称
      name: mynginx   # 容器名称
      imagePullPolicy:  never

亲和性调度 NodeAffinity podAffinity PodAntiAffinity 污点调度(容忍调度) Taints Toleration

image.pngimage.pngimage.pngimage.png

image.png

image.png

python
#   给节点1设置污点   并且  新建的pod 不会在调度到 node1
#  NoSchedule  新建的pod 不会在调度到 node1
#  NoExecute   新建的pod  不会在调度到 node1  并且原有的pod 会终止运行
#  PreferNoSchedule   尽量调度到node1 除非没有其他的节点
kubectl taint nodes  node1  node-env=dev:NoSchedule
# 移除污点
kubectl taint nodes node1 node-env:NoSchedule-
kubectl taint nodes node1 node-env:NoExecute-
kubectl taint nodes node1 node-env:NoExecute-

#  查看污点信息 
#  kubectl describe node node1

容忍的配置

python
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
#   容忍
#   把pod 调度到 具备 指定污点的node上
  tolerations:
    - key: "node-env"
      operator: "Equal"
      value: "dev"
      effect: "NoSchedule"
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80
          protocol: TCP

image.png job image.png

image.png

image.png kubectl get job -owide -w # -w 监控 image.pngimage.pngimage.png 存储 image.pngimage.pngimage.pngimage.pngimage.png