Kubernetes中资源对象的使用
###########调用集群api获取一些信息
#获取token
kubectl get secret -A
#通过curl请求api地址,查看api可查询的内容
curl --cacert /etc/kubeasz/clusters/k8s-cluster1/ssl/ca.pem -H "Authorization: Bearer #${token}" http://192.168.213.11:6443
#检查apiserver是否可以访问etcd
curl --cacert /etc/kubeasz/clusters/k8s-cluster1/ssl/ca.pem -H "Authorization: Bearer #${token}" http://192.168.213.11:6443/healthz/etcd
##Kubernetes的几个重要概念
资源对象:kubernetes基于声明式API,和资源对象进行交互
yaml文件:为了方便后期管理,api管理资源对象使用yaml文件来管理
yaml必须字段:
apiVersion:创建该对象使用的kubernetes API的版本,不知道的可以通过 kubectl api-resources查看
kind:想要创建的对象类型
medadata:定义识别对象唯一性的数据(元数据),包括name,可选namespace(创建资源的时候可以-n执行)
spec:定义资源兑现的详细规范信息(同一的label标签,容器名称,镜像等)
status:pod创建完成后k8s自动生成状态信息
pod:
-
pod是k8s中的最小单元
-
一个pod可以运行一个容器,也可以运行多个容器
-
运行多个容器的话,这些容器是一起被调度的
-
pod的生命周期是短暂的,不会资源,使用完成后就会被销毁
-
一般我们是通过controller来创建和管理pod
#######################################控制器资源说明#########################################
job:一次性任务,例:数据初始化
cronjob:执行周期性质的任务,例数据备份,定时获取token等等
Replication Controller:副本控制器,selector只支持=和!=,第一代pod副本控制器
ReplicaSet:副本控制器,和Replication Controller的区别为selector还支持in和notin,写法有一点区别,第二代副本控制器
selector加matchExpressions是in或notin
deployment:比rs更高一级的副本控制器,具有rs的功能外还有很多高级功能,例如滚动升级、回滚等操作,第三代副本控制器
滚动更新:
kubectl rollout undo deploy/my-deploy #回滚到最近的一个版本
kubectl rollout history deploy/my-deploy #查看保留的所有历史的可回滚版本
kubect rollout history deploy/my-deploy --revision=3 #查看编号为3的历史版本信息
kubectl rollout undo deploy/my-deploy --to-revision=3 #回滚到编号为3的版本
patch:可以使用json的方式更新资源(需要了解json)
kubectl patch deploy/my-deploy -p '{"spec": {"replicas":5}}' #修改副本个数为5
kubectl patch deploy/my-deploy -p '{"spec": {strategy: {"rollingUpdate": {maxSurge: 2,maxUnavailable:1}}}}' #修改滚动更新策略,最多能超过副本数两个,最多有1个不可用
滚动更新暂停(金丝雀发布):
kubectl set image deploy/my-deploy nginx=nginx:1.20.1 && kubectl rollout pause deploy/my-deploy #修改my-deploy中容器name为nginx的镜像,修改后会滚动更新,等增加一个pod节点后执行pause(暂停),这样当前的节点数要比控制器的期望的多,多出来的还是你想更新的版本的,完成金丝雀发布
kubectl rollout resume deploy/my-deploy #暂停开始操作
###################################################################################
service:由于pod重建后ip就会发生变化,因此pod和pod不能直接使用pod的ip进行访问,而service则解耦了服务和应用,service时间方式是通过标签动态匹配后端的endpoint
四种类型:
ClusterIP:只在集群中才能访问到
LoadBalancer:在公有云上才能使用,会在service上申请一个负载均衡器
NodePort:会在每一个node节点监听一个相同端口,用于客户端的访问,会把请求抓发至对应的service,service在转发到pod
ExternalName:引用集群外部资源到集群内部使用
端口类型:
port:service访问端口
targetport:pod开放的端口
nodePort:开启nodeport类型后,集群外部访问service的端口
cluserIP类型的yaml:
nodePort类型的yaml文件: