一、K8S基础知识
K8S(Kubernetes)是⼀个容器集群管理系统,可以做容器集群的⾃动化部署,⾃动化扩缩容,维护等功能
传统应⽤部署是通过将程序打包在服务器上运⾏,通过允许脚本将程序跑起来,如果⼀个服务器⽆法响应⼤量请求,需要通过运维⼈员添加服务器来做负载均衡来分担压⼒,在此过程中,是有⼈⼒介⼊的过程的,K8S⽤于解决该问题
K8S是属于主从设备模型(Master-Slave模型),Master节点主要负责容器的调度、管理和运维,Slave节点负责⽤户程序的执⾏,主节点⼀般称之为Master Node或者Head Node,从节点⼀般称之为Worker Node或者Node,⼀般来说,主节点或者从节点都是K8S的Master组件和Slave组件的实体服务器,每⼀个Node节点都对应着⼀台服务器(可以将Master和Slave安装在同⼀台服务器上,但是不推荐),所有的节点构成K8S集群系统,在⼀个集群中可以存在多个Master节点和Slave节点
1.快速部署应用
2.快速扩展应用
3.无缝对接新的应用功能
4.节省资源,优化硬件资源的使用
Pod:Pod是在Kubernetes中创建和管理的最⼩可部署的计算单元
Deployment:作⽤是管理和控制Pod和ReplicaSet,管控它们运⾏在⽤户的期望之中
ReplicaSet:管理和控制Pod,但是它是受控于Deployment的,类似于包⼯头下的⼩包⼯头
Service:负责管控Pod的⽹络服务,K8S中的服务不同于我们常说的服务,在官⽅给的解释中说到,Kubenetes为Pods提供⾃⼰的IP地址,并为⼀组Pod提供相同的DNS域名,并且可以在它们之间进⾏负载均衡,这相当于API⽹关,做⼀个负载均衡器。
二、一些常用命令
- 允许Master节点调度Pod,默认Master节点不允许部署调度Pod,使用如下命令去除污点
- kubectl taint nodes --all node-role.kubernetes.io/master-
复制代码- kubectl get node -owide #查看节点信息
- kubectl top node #查看Node的资源使用情况
- kubectl describe node nodeName #查询节点的详细信息
复制代码- kubectl get node --show-labels #查看节点标签
- kubectl label nodes xxx k1=v1 #给节点添加标签
- kubectl label nodes xxx k1- #删除标签
复制代码
- 命名空间相关,NameSpace是一组资源和对象的抽象,有一个默认的NameSpace(Default)
- kubectl create ns #创建ns
- kubectl get ns #获取所有的NameSpace
复制代码
- Pod相关,Service命令与管理Pod的一致,将【pod】替换成【service】
- kubectl apply -f pod-nginx.yml #使用yaml文件创建Pod
- kubectl delete -f pod-nginx.yml #使用yaml文件删除Pod
- kubectl get pod -n ns #查看ns下所有的Pod
- kubectl describe pod -n k8s-demo xxx #查看Pod的详细信息
- kubectl delete pod -n ns xxx #删除Pod
复制代码
- Deployment的创建方式和通过yaml文件创建Pod类似,是Pod的管理者
- kubectl set image deploy nginx-deployment -n ns *=nginx:latest #修改Pod的镜像版本
- kubectl scale deploy -n k8s-demo nginx-deployment --replicas=2 #设置Pod的副本数量
复制代码Pod是平凡的,它门会被创建,也会死掉(生老病死),并且他们是不可复活的,每个pod都有自己的ip,这些IP也随着时间的变化也不能持续依赖。这样就引发了一个问题:如果一些Pods提供了一些功能供其它的Pod使用(让我们叫作前台),在kubernete集群中是如何实现让这些前台能够持续的追踪到这些后台的。答案是Service
三、yaml示例
- apiVersion: v1
- kind: Pod
- metadata:
- name: nginx
- namespace: demo
- spec:
- nodeSelector:
- app: nginx
- containers:
- - name: nginx
- image: nginx:1.18.0
- # 镜像拉取策略,默认是IfNotPresent,其余还有Always, Never
- imagePullPolicy: IfNotPresent
复制代码- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: nginx-deployment
- namespace: demo
- spec:
- # 副本数
- replicas: 3
- selector:
- matchLabels:
- app: nginx
- template:
- metadata:
- labels:
- app: nginx
- spec:
- # 绑定节点
- nodeName: demoNode
- # 通过标签进行节点选择
- nodeSelector:
- app: nginx
- containers:
- - name: nginx
- image: nginx:1.18.0
- env:
- - name: k1
- value: v1
- ports:
- - containerPort: 80
- # 存活探针
- livenessProbe:
- httpGet:
- path: /index.html
- port: 80
- initialDelaySeconds: 3
- periodSeconds: 3
- # 就绪探针
- readinessProbe:
- httpGet:
- path: /index.html
- port: 80
- initialDelaySeconds: 3
- periodSeconds: 3
复制代码- apiVersion: v1
- kind: Service
- metadata:
- name: nginx
- spec:
- # 通过标签与pod匹配
- selector:
- app: nginx
- ports:
- - name: default
- protocol: TCP
- port: 80
- targetPort: 80
- type: ClusterIp
复制代码说明:以上K8S内容只是本人作为一个简单入门的记录,包含了日常工作的基本使用,再往深的内容并不涉及,比如Etcd存储,调度器,监控器等等,这些内容可以上Kuberneters的中文社区自己学习
来源:https://www.cnblogs.com/hujh2022/p/16342876.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |