k8s中资源管理方式可以划分为下面的几种:命令式对象管理、命令式对象配置、声明式对象配置。
命令式对象管理:直接使用命令的方式来操作k8s资源, 这种方式操作简单,但是无法审计和追踪。
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
通过命令和配置文件来操作k8s资源,这种方式可以审计和追踪,但是项目大的时候配置文件多,操作麻烦。
kubectl create/patch/delete -f nginx-pod.yaml
通过apply命令和配置文件去操作k8s资源,这种方式操作简单,支持目录操作,但是意外的情况难以调试。
kubectl apply -f nginx-pod.yaml
基本语法
kubectl [command] [type] [name] [flags]
○ command:指定要对资源执行的操作,如:create、get 、delete 等。
○ type:指定资源的类型,如:deployment 、pod 、service 等。
○ name:指定资源的名称,名称大小写敏感。
○ flags:指定额外的可选参数。
kubectl get namespace(ns)
kubectl create namespace(ns) hello
kubectl delete namespace(ns) hello
kubectl apply -f hello.yaml
kubectl delete -f hello.yaml
hello.yaml
apiVersion: v1
kind: Namespace
metadata:
name: hello
kubectl get pod(pods) | kubectl get pod -n xxx
kubectl get pods --all-namespaces
kubectl apply -f xxx.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: nginx-pod
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- name: nginxport
containerPort: 80
kubectl delete pods xxx -n yyy
kubectl logs -f pod名称 -n xxx
kubectl exec -it xxx – /bin/bash
在k8s 集群中,pod 是应用程序的载体,我们可以通过pod 的ip来访问应用程序,但是pod的ip地址不是固定的,这就意味着不方便直接采用pod的ip来对服务进行访问,为了解决这个问题,k8s提供了service资源。service资源会提供对同一个服务的多个pod进行聚合,并且提供统一的入口地址,通过访问service的入口地址就能访问到后面的pod 服务。
kubectl expose --name=nginxsvc deploy nginx --port=80
kubectl get service -n xxx
kubectl delete service(svc) xxx - n yyy
kubectl edit svc/svc名称
service三种不同种类的type
ClusterIP: 默认分配一个集群内部可以访问的虚拟IP
NodePort: 在每个node上分配一个端口作为外部的访问入口
LoadBalancer: 与NodePort类似,在每个节点上启用一个端口来暴露服务,除此之外,K8S会请求底层云平台(aliyun, aws等)上负载均衡器,将每个Node([NodeIP]:[NodePort])作为后端添加进去.创建LoadBalancer类型的Service会自动创建和绑定外部LoadBalancer到节点映射的NodePort上。
ExternalName:通过返回带有该名称的 CNAME 记录,使用任意名称(由 spec 中的externalName指定)公开 Service 。不使用代理。这种类型需要 kube-dns 的 v1.7 或更高版本。
kubectl get deployment -n xxx
kubectl scale --replicas=3 deployment nginx
kubectl rollout history deployment 应用部署名称
kubectl rollout undo deployment 应用部署名称
kubectl rollout undo deployment 应用部署名称 --to-revision=1