kubernetes(命令)

kubectl运行需要配置文件的,默认只在master的$HOME/.kube。若需要在node节点上运行,需要将配置文件复制到node上。
也就是要在master上进行:
scp -r HOME/.kube node1:HOME/

命令式对象配置:直接使用命令去操作kubernetes资源
创建namespace
kubectl create namespace dev
kubectl create ns dev #简写

查看namespace
kubectl get ns
kubectl get ns default
kubectl describe ns default 

在该namespace下创建并运行一个nginx的pod

格式:kubectl run (pod控制器) [参数:--image --port --namespace]

kubectl run nginx001 --image=nginx:1.17.1 -n dev  #nginx001为pod控制器的名字
kubectl run nginx002 --image=nginx:1.17.1 --port=80 --namespace=dev


查看pod
kubectl get pod -n dev
kubectl get pod -n dev -o wide
kubectl describe pods pod-cbb995bbf-t6hww -n dev


删除pod
kubectl delete pod pod-864f9875b9-pcw7x #默认名称空间下
kubectl delete pod pod-864f9875b9-pcw7x -n dev #dev名称空间下

删除namespace
kubectl delete ns dev

 

命令式对象配置:通过命令配置和配置文件去操作kubernetes资源(只能操作一个文件)
kubectl create -f nginxpod.yaml
kubectl delete -f nginxpod.yaml

 

声明式对象配置,通过apply命令和配置文件去操作kubernetes资源(可以操作一个目录)
kubectl apply -f nginxpod.yaml #创建、更新pod

 

-----------------------------------------------------------------------------------------------------------------

deployment控制器

创建pod控制器
命令创建Pod时就是先创建pod控制器,然后通过控制器来创建、管理pod
#nginx为pod控制器的名字,replicas为副本数量,也就是要启动pod的数量
kubectl run nginx --image=nginx:1.17.1 --port=80 --replicas=3 -n dev


查看pod控制器
kubectl get deployment -n dev
kubectl describe deploy nginx -n dev

删除pod控制器
#命令创建的pod,是由控制器创建的
#yaml配置文件创建的pod,是单纯的pod,没有控制器
#若pod由控制器创建的,只删除pod后,控制器会立即重建一个pod,所以需要删除控制器
kubectl delete deploy nginx -n dev

-----------------------------------------------------------
label标签
对各个Pod分组,方便管理。
namesapce分隔的组不能互通,label分隔的组能互通

查看pod标签
kubectl get pod -n dev --show-labels

给pod添加标签
kubectl label pod nginx -n dev verson=1.0

给pod更新标签
kubectl label pod nginx -n dev version=2.0 --overwrite

给pod删除标签
kubectl label pod nginx -n dev version-

筛选标签
kubectl get pod -l "version=2.0" -n dev --show-labels
kubectl get pod -l "version!=2.0" -n dev --show-labels
kubectl get pod -l "version in (1.0,2.0)" -n dev --show-labels
kubectl get pod -l "version not in (2.0)" -n dev --show-labels
---------------------------------------------------------------------
service
pod重启后IP地址会改变,且IP是虚拟IP,外部无法访问。service是一组同类pod的访问接口。service的IP不变。

一、创建仅集群内部可以访问的service(ClusterIP)

#暴露service(暴露控制器nginx,指定service名称、类型、端口、内部pod端口)
kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev

#查看service
kubectl get svc -n dev

二、创建外部可以访问的service(NodePort)
kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev


删除svc
kubectl delete svc svc-nginx-1 -n dev
------------------------------------------------------------
编写yaml

#查看一级属性

kubectl explain pod
#查看二级属性
kubectl explain pod.metadata

#以yaml形式查看pod
kubectl get pod nginx-64777cd5540f64vx -n dev -o yaml

#交互模式进入查看容器

kubectl exec pod-command(pod名字) -n dev -it -c busybox(容器名字) /bin/sh

#通过yaml文件创建Pod

kubectl create -f yaml文件名

#缩进左对齐才能表示同级关系
#-表示数组(列表)
#:后面必须加空格

#status:    #状态,kubernetes自动生成
apiVersion: v1   #版本(kubectl api-versions查询)
kind: Pod   #类型(node、pod、svc、deploy等,kubectl api-resources查询)
metadata:   #元数据(名字、名称空间、标签)
  name: pod-base  #pod名字,必须为小写
  namespace: dev
  labels:
    -user: balaba
spec:    #描述,对各种配置的描述
  containers:    #容器列表,定义容器的详细信息
  - name: nginx  #容器名字
    image: nginx:1.17.1  #指定容器tag,若指定tag具体版本号,则拉取镜像策略默认值为IfNotPresent。若tag为latest,拉取策略默认值为always

    imagePullPolicy: Always   #镜像拉取策略(Always:一直从远程拉取镜像,IfNotPresent:本地有就用本地的,本地没有再从远程仓库拉取镜像,Never:从不去远程仓库拉取,本地没有就报错)

    ports:   #设置容器暴露的端口列表

    -name: nginx-port  #端口名字,必须保证name在pod中唯一

      containerPort: 80  #容器要监听的端口号

      protocol: TCP    #使用的协议

    resources:   #资源配置

    limits:   #资源上限(超过门限,容器终止并重启)

      cpu: "2"

      memory: "10G"

    requests:  #资源下线(若环境资源不够,容器不启动)

      cpu: "1"

      memory: "10M"

  - name: busybox
    image: busybox:1.30  #busybox不是一个进程,是类似一个工具的集合(一堆命令),kubernetes集群启动后会将其关闭,所以需要配置命令,让其占用个进程

    command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo $(date +%T) >>/tmp/hello.txt; sleep 3; done;"]  #容器的启动命令列表,如不确定,使用打包时使用的启动命令
nodeName:    #根据nodeName的值将pod调度到指定的node节点上
nodeSelector:    #根据nodeSelector定义的信息将pod调度到包含这些label的node上
hostNetwork:    #是否使用主机网络,默认fales
volumes:    #存储卷,定义pod上面挂载的存储信息
restartPolicy:   #重启策略,pod遇到故障时的处理策略(Always,OnFailure,Never)

posted @ 2021-06-14 17:08  丑矬穷屌  阅读(138)  评论(0)    收藏  举报