使用Kubernetes的方法:
面向其声明式API进行编程:
声明资源对象的终态
如何达成实际状态,则由Controller来负责提供了客户端工具:
CLI: kubectl
Web UI:Dashboardkubectl
指令式命令:管理的目标的对象的操作和配置,通过命令行选项进行指定kubectl create deployment #有就删,没有就错
kubectl create service nodeport
kubectl get nodes
kubectl delete node k8s-node01.magedu.com
指令式对象配置:对象配置通过配置文件进行定义 #有就删,没有就不显示 建议使用
kubectl get -f nodes.yaml
kubectl delete -f nodes.yaml
声明式对象配置:对象配置通过配置文件进行定义
kubectl apply -f nodes.yaml #没,创建,有不一样。修改,一样,不动 建议使用
API资源规范
API Server内置有限种的数据结构(资源类型),每种类型都可以被填充数据后实例化出一至多个对象
~# kubectl api-resources 列出所有表结构
NAME SHORTNAMES(缩写) APIVERSION NAMESPACED KIND
(名字) (缩写) (名称空间级别) (表类型标识单词头大写)
bindings v1 true(是) Binding
componentstatuses cs v1 false(集群级别) ComponentStatus
Pod:类型
列:
nginx-pod
demoapp-pod
fpm-pod对象的标识符:对象的Name,不能重复可以01 02
为降低名称冲突的概率:使用名称作用域
名称空间:Namespace #当前资源只要在名称空间里不重复就行了,这里名称空间和内核的名称空间没有关系的,他是K8s独有的名称空间
名称作用域存在两个级别:
Cluster #集群级别
Namespace #一个Cluster里可以创建多个名称空间资源类型也有级别的概念,类型所属的级别,代表着创建资源对象所属的级别;
每个的组的版本号,独立演进 alpha: 内测 beta:公测 stable:稳定 ~# kubectl api-versions admissionregistration.k8s.io/v1 apiextensions.k8s.io/v1 apiregistration.k8s.io/v1 apps/v1 authentication.k8s.io/v1 authorization.k8s.io/v1 autoscaling/v1 autoscaling/v2 autoscaling/v2beta2 batch/v1 certificates.k8s.io/v1 coordination.k8s.io/v1 discovery.k8s.io/v1 events.k8s.io/v1 flowcontrol.apiserver.k8s.io/v1beta1 flowcontrol.apiserver.k8s.io/v1beta2 networking.k8s.io/v1 node.k8s.io/v1 policy/v1 rbac.authorization.k8s.io/v1 scheduling.k8s.io/v1 storage.k8s.io/v1 storage.k8s.io/v1beta1 v1 v1 --> core/v1
资源范式:
apiVersion: <String> 负责标明该类型所隶属的API群组
Kind: <String> 用于指定类型标识
metadata: <Object> 帮助识别对象唯一性的数据,包括一个 name 名称
spec: <Object>, 定义资源对象的终态status: <Object>, 资源的实际状态,由系统组件自行负责维护
核心功能:以应用为中心的应用编排平台
围绕编排运行应用的各种需求,被分别组织到多个资源类型中内建文档: 查看资源信息,快速获取内容
kubectl explain Kind
kubectl explain Kind.spec
查看 安装相关命令
kubectl get pods #查看
kubectl get pods mysql-9d74fbb9b-6wb5v -o yaml #yaml格式查看你指定kubectl create namespace www #创建名称空间
kubectl get namespace #查看所有名称空间
系统的内置名称空间:
default:默认使用的名称空间
kube-system:系统的名称空间
kube-node-leases
kube-publickubectl get pods -n kube-system #查看所有系统的名称空间
查看或列出资源对象
kubectl get <Type> [<NAME1> <NAME2> ...] [-n <NAMESPACE>] [-o yaml|json|wide]kubectl get <Type1>/<NAME1> <Type2>/<NAME1> [-n <NAMESPACE>] [-o yaml|json|wide]
--watch, -w:持续监视
[root@master01 ~]#kubectl create deployment demoapp --image=ikubernetes/demoapp:v1.0 --replicas=2 -n www #创建 deployment.apps/demoapp created [root@master01 ~]#kubectl get deployments -n www NAME READY UP-TO-DATE AVAILABLE AGE demoapp 0/2 2 0 57s [root@master01 ~]#kubectl get pods -n demo NAME READY STATUS RESTARTS AGE demoapp-55c5f88dcb-bsjsd 0/1 ContainerCreating 0 8s demoapp-55c5f88dcb-wwc5f 0/1 ContainerCreating 0 8s kubectl get pods -n wide -n demo #查看详情 kubectl logs demoapp-55c5f88dcb-bsjsd -n demo #查看日志 查看容器日志: kubectl logs <POD_NAME> [-c CONTAINER_NAME] [-n <NAMESPACE>] kubectl scale deployments/demoapp --replicas=4 -n demo #缩 30秒宽限 阔不需要 手动扩容或缩容: kubectl scale <TYPE>/<NAME> --replicas=<NUM> [-n <NAMESPACE>] 在Pod中的某容器内部运行命令: kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options] kubectl exec -it POD_NAME [-c CONTAINER] -- COMMAND [args...]
Service 固定发访问端口 应用
Service:
类型:
ClusterIP:仅支持集群内部的客户访问 默认
NodePort:支持集群内部客户端访问;同时,支持集群外部的客户端通过任何一个的节点IP地址进行访问,但要使用特定端口 分配的范围:30000-32768kubectl create service clusterip NAME [--tcp=<port>:<targetPort>] [--dry-run=server|client|none]
kubectl create service nodeport NAME [--tcp=port:targetPort] [--dry-run=server|client|none] [options] kubectl create service nodeport demoapp --tcp=80:80 -n demo
curl 172.29.9.11:30483 #可以在外部进行访问 可以 负载均衡 内部名称访问就行
kubectl apply -f mysql-ephemeral/ -n demo #部署拉下来的仓库文件