Kubernetes
2023-09-21 10:29:16 0 举报
AI智能生成
k8s基础
作者其他创作
大纲/内容
核心组件
master
ETCD
数据库,存储整个集群的数据和状态信息
API server
集群的通信都要经过API server
controlor-manager
scheduler
node
kubelet
kube-proxy
pod
pod可以理解为是一组、一个或多个容器组。k8s为每个pod分配一个唯一的IP地址
pod探针
(检测容器内应用是否正常)
(检测容器内应用是否正常)
Execaction 执行一个指定命令,若返回值为0,则认为容器健康
TCPsocketaction 通过TCP链接检查容器某个端口,端口开放则容器健康
HTTPGetaction 对指定URL进行get请求,状态码在200-400之间则容器健康
工作负载
Label和Selector
label(key=value)
为节点添加标签 kubectl label node k8s-node (key=value)
可以指定nodeselector:(key=value)将pod调度到该节点
Selector标签选择器
主要用于资源的匹配,可以使用该方式对集群中的资源进行分配
kubectl get pod --show-labels
RC RS
RC副本控制器 可确保一个或一组pod总是可用
RS 支持标签选择器,用作Deployment协调创建、删除和更新pod
Deployment
配置文件
vi deployment.yaml
创建过程
创建 Deployment 以将 ReplicaSet 上线。ReplicaSet 在后台创建 Pod。 检查 ReplicaSet 的上线状态,查看其是否成功。
通过更新 Deployment 的 PodTemplateSpec,声明 Pod 的新状态 。 新的 ReplicaSet 会被创建,Deployment 以受控速率将 Pod 从旧 ReplicaSet 迁移到新 ReplicaSet。 每个新的 ReplicaSet 都会更新 Deployment 的修订版本。
如果 Deployment 的当前状态不稳定,回滚到较早的 Deployment 版本。 每次回滚都会更新 Deployment 的修订版本。
通过更新 Deployment 的 PodTemplateSpec,声明 Pod 的新状态 。 新的 ReplicaSet 会被创建,Deployment 以受控速率将 Pod 从旧 ReplicaSet 迁移到新 ReplicaSet。 每个新的 ReplicaSet 都会更新 Deployment 的修订版本。
如果 Deployment 的当前状态不稳定,回滚到较早的 Deployment 版本。 每次回滚都会更新 Deployment 的修订版本。
滚动更新
kubectl edit deployment nginx-deployment
修改image 字段的镜像版本
保存修改即会下载性镜像,进行滚动更新
修改image 字段的镜像版本
保存修改即会下载性镜像,进行滚动更新
功能
创建
kubectl create -f deployment.yaml
版本回滚
1,查看历史版本 --revision参数查看详细版本信息
kubectl rollout history deployment nginx-deployment --revision 1
2,选择要恢复的版本进行回滚
kubectl rollout undo deployment nginx-deployment --to-revision 1
kubectl rollout history deployment nginx-deployment --revision 1
2,选择要恢复的版本进行回滚
kubectl rollout undo deployment nginx-deployment --to-revision 1
扩容缩容
使用--replicas参数设置需要扩缩容的副本数
kubectl scale --replicas 4 deployment nginx-deployment
kubectl scale --replicas 4 deployment nginx-deployment
暂停与恢复
kubectl rollout pause/resume deployment nginx-deploymeny
StatefulSet
(有状态集)常用于部署有状态的且需要有序启动的应用程序,一般有以下需求:
需要稳定的独一无二的网络标识
需要持久化数据
需要有序的优雅的部署和拓展
需要有序的,自动的滚动更新
定义
StatefulSet是Kubernetes中的一种资源对象,用于管理有状态应用程序的部署和扩展。
特点
1.有状态:每个Pod都有唯一的标识符和持久化存储,可以保持应用程序的状态。
2.有序部署:Pod按照指定的顺序依次启动和停止。
3. 持久化存储:每个Pod都有自己的持久化存储卷,数据不会丢失。
4. 稳定的网络标识符:每个Pod都有一个稳定的网络标识符,可以通过DNS进行访问。
使用场景
1. 数据库:如MySQL、PostgreSQL等有状态数据库。
2. 消息队列:如Kafka、RabbitMQ等有状态消息队列。
3. 缓存服务:如Redis、Memcached等有状态缓存服务。
结构
1. metadata:元数据信息,包括名称、命名空间等。
2. spec:规格信息,包括副本数、卷声明、模板等。
3. status:状态信息,包括当前副本数、可用副本数等。
示例
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: default
spec:
replicas:3
serviceName: mysql
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort:3306
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage:1Gi
参考资料
- Kubernetes官方文档:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
- StatefulSets in Kubernetes: https://kubernetes.io/blog/2016/12/statefulset-run-scale-stateful-applications-in-kubernetes/
Service
job
Volume
Namespace
Configmap
kubectl
常用命令
常用命令
显示pod的更多信息
kubectl get pod <pod-name> -o wide
kubectl get pod <pod-name> -o wide
以Yaml格式显示pod的详细信息
kubectl get pod <pod-name> -o yaml
kubectl get pod <pod-name> -o yaml
创建资源对象
kubectl create -f xxxx.yaml
kubectl create -f xxxx.yaml
查看资源对象
kubectl get pods,rc,service
kubectl get pods,rc,service
查看资源详细信息
kubectl describe nodes
kubectl describe nodes
删除资源对象
kubectl delete pod
kubectl delete pod
连接pod中某个容器
kubectl exec -it <pod-name> -c bash
kubectl exec -it <pod-name> -c bash
创建或更新资源对象apply,和create逻辑稍有差异:如果目标
资源对象不存在,则进行创建,否则进行更新
kubectl apply -f xxxx.yaml
资源对象不存在,则进行创建,否则进行更新
kubectl apply -f xxxx.yaml
编辑运行中的资源对象
kubectl edit deploy nginx 保存后即可完成资源更改
kubectl edit deploy nginx 保存后即可完成资源更改
资源对象标签设置 给default设置testing=true标签
kubectl label namespaces default testing=true
kubectl label namespaces default testing=true
介绍
Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。
概念
1. Pod:Kubernetes最小的部署和可扩展单元,包含一个或多个容器。
容器:用于运行应用程序的独立环境。
标签:用于标识和选择Pod的键值对。
控制器:用于定义Pod的预期状态和副本数量。
2. Service:定义一组Pod的访问方式,提供负载均衡和服务发现功能。
3. 命名空间:用于隔离和组织资源的虚拟集合。
4. 配置管理:用于管理应用程序的配置信息。
5. 存储卷:用于在Pod之间共享和持久化数据。
6. 调度器:负责将Pod调度到合适的节点上运行。
7. 水平扩展:根据负载情况自动调整Pod的副本数量。
8.服务发现:自动将服务注册到DNS中,使其他服务能够发现和访问。
9. 滚动更新:无缝地将应用程序从旧版本更新到新版本。
10. 高可用性:通过自动恢复故障节点和容器来提供高可用性。
架构
1. Master节点:负责整个集群的管理和控制。
etcd:分布式键值存储,用于保存集群的配置信息。
API Server:提供集群的REST API接口。
Scheduler:负责将Pod调度到合适的节点上运行。
Controller Manager:管理集群中的控制器。
2. Node节点:运行应用程序的节点。
Kubelet:与Master节点通信,管理和运行Pod。
Kube-proxy:负责网络代理和负载均衡。
Container Runtime:运行容器的工具,如Docker。
安装和部署
1. Minikube:用于在本地环境中快速部署和运行Kubernetes集群。
2. kubeadm:用于在生产环境中部署和管理Kubernetes集群。
3. Kubernetes Dashboard:可视化管理Kubernetes集群的Web界面。
4. Helm:用于管理Kubernetes应用程序的包管理工具。
进阶主题
1. 高级调度:使用调度策略和亲和性规则来优化Pod的调度。
2. 安全性:配置访问控制、认证和授权策略,保护集群的安全。
3. 监控和日志:使用Prometheus、Grafana等工具监控和收集集群的指标和日志。
4. 自动化运维:使用Operator模式和自定义资源来实现自动化运维。
5. 多集群管理:使用Federation或多集群管理工具来管理多个Kubernetes集群。
6. CI/CD集成:将Kubernetes集成到持续集成和持续部署流程中。
实战案例
1. 部署Web应用程序:使用Kubernetes部署和扩展Web应用程序。
2. 多环境部署:使用命名空间和配置管理来实现多环境部署。
3. 滚动更新:使用滚动更新策略将应用程序从旧版本更新到新版本。
4. 水平扩展:根据负载情
收藏
0 条评论
下一页