| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> k8s快速入门 -> 正文阅读 |
|
[系统运维]k8s快速入门 |
目录 K8S的目标降低运维成本。 注:学习k8s之前一定要熟练使用docker。 K8S是啥一种容器管理技术。 容器如何管理?引入pod机制,通过pod来管理容器。 pod是啥?一个逻辑分组,在pod中存在1个或多个容器,在pod中会部署一组相关的服务(为啥要是相关的?为了减少网络开销)。pod有自己的主机名、IP地址。pod是k8s能操作的最基本的单位。 举例我们的系统(awp)要部署上线(通过容器),先准备好我们项目的镜像,然后通过k8s来进行管理(先通过k8s创建pod)。 我们访问一个master节点(服务器),我们的请求会调度到一个Node节点(linux服务器),创建一个pod(逻辑分组)。我们的项目镜像会在pod里创建一个容器。 注:
Pause容器创建pod时会自动创建一个pause容器,其它容器共享pause的存储和网络。 其它容器通过localhost相互访问。 K8S核心组件介绍ReplicationController:副本控制器举例:3个pod内都部署了tomcat,就是3个副本,相当于3个tomcat集群。 集群的预期数量由页面或配置文件或命令来指定。 如果一个挂掉,会自动再创建一个,保证服务高可用。 ReplicaSet:副本控制器本质跟ReplicationController差不多,新版本的K8S建议用ReplicSet取代ReplicationController 区别: ReplicationController做pod选择器的时候,只支持单选。(筛选pod) ReplicSet还能支持复选。(筛选pod) 注:pod可以加标签,通过标签进行筛选 DeploymentDeployment为pod和ReplicSet提供了一个声明式定义方法,用来替代ReplicationController 建议使用Deployment来自动管理ReplicSet 可理解为Deployment对ReplicSet进行了一个封装 应用场景: 滚动更新:发布新版本应用的时候,Deployment会重新创建ReplicSet,再由ReplicSet创建新的pod 做到不停机发布新版本程序。 回滚应用:如果发版失败,可以回滚。 举例:如果v2版本不好用,可以迅速回滚到v1版本的程序。 扩容和缩容:增加pod或者删除pod HPA监控pod的CPU使用率,如果利用率过高,自动扩容。 StatefullSet创建集群,就是创建多个pod副本,大部分的服务是无状态的,比如tomcat服务集群。 通过容器部署,适合那些无状态的服务。 无状态: 没有数据需要实时的保留 有状态: 需要实时的数据更新和存储 举例理解:如果集群里的一个服务器抽离出去,再加回来,不影响用户使用的话,就是无状态服务,比如tomcat或nginx,数据库不行,所以数据库服务是有状态服务。 引申:docker容器主要面向无状态服务,可以用来部署项目的应用服务,一般不用来部署数据存储服务。但是有了k8s的StatefullSet组件,docker容器就可以部署有状态服务。 比如: 有序部署→我们审计系统部署,先部署数据库,再部署Redis,再部署应用程序,最后部署nginx 有序删除→先删除nginx,再应用程序,再Redis,最后数据库 DaemonSet确保每个node都至少存在一个pod LabelK8s里所有对象都可以打标签(标识),一个资源对象可以定义任意数量标签。实质是一系列的键值对 没有标签,就无法找到一组相关的pod,也就无法实现负载均衡。 标签举例: 版本标签:”release”:”stable” 环境标签:”environment”:”dev”,”environment”:”server” 服务发现在此不讲 集群安装在此不讲 操作前提?K8s默认是要开机自动启动的 服务器上已经安装了docker,Docker默认开机自启动 K8s命令分三类陈述式:命令(指令) 陈述式对象配置:命令(指令)+资源配置文件 声明式:编写yaml文件 我只介绍陈述式 常用命令(master节点)docker ps 看一下docker启动没有 docker images 看一下k8s的镜像有没有 一般会有以下 k8s.gcr.io/kube-apiserver k8s.gcr.io/kube-proxy k8s.gcr.io/kube-scheduler k8s.gcr.io/kube-controller-manager k8s.gcr.io/kube-etcd k8s.gcr.io/coredns k8s.gcr.io/pause kubectl get node 查看集群节点,看节点是否已经启动 状态正常应该是Ready kubectl get pod 查看集群运行的pod kubectl get pod -n kube-system -o wide ?查看k8s相关的pod -n 命名空间,不指定,命名空间默认为default -o 输出 wide 详细信息 状态为Running,正常 状态为Pending,可能有些依赖还没运行 状态为CrashLoopBackOff,重启 kubectl create -f kube-flannel.yml ??创建yaml文件 kubectl apply -f kube-flannel.yml ???应用yaml文件,会下载一些组件 在node节点执行 kubeadm join master的ip:端口号 --token xxxxxxx --discovery-token-ca-cert-hash xxxxxxx 加入master节点(加入到集群) 举例1:创建pod,pod里运行一个tomcat容器实际操作: 在master节点下 kubectl run my-tomcat --image=tomcat --port=8080 执行后正常应该显示deployment.apps/my-tomcat created 再执行kubectl get pod -o wide看一下状态,也顺便看一下运行在集群的哪个节点 kubectl get rs ?正常应该显示my-tomcat-xxxxx ..... kubectl get deployment ?正常应该显示my-tomcat ..... 结合Deployment组件介绍的那张图来执行命令 注: 这个my-tomcat是deployment的名称 没有指定pod副本数量,默认只创建一个pod副本 镜像会被放到某个节点下,这样很low,应该有统一的镜像仓库 kubectl run my-tomcat --image=tomcat:v2 --port=8080 --replicas=3 使用v2版本的tomcat镜像,创建3个副本 举例2:对上面的pod进行扩容kubectl scale deployment my-tomcat --replicas=3 ??把pod扩展为3个副本 注:直接删除任意一个pod副本是删除不了的,又会自动创建出来 举例3:彻底删除上面的podkubectl delete deployment my-tomcat 注:如果没有自动删除rs和pod,手动再删除一下rs和pod 举例4:创建servicekubectl expose deployment/my-tomcat --port=30000 --target=8080 ?同时会产生一个yaml文件 kubectl get svc -o wide ?查看service kubectl edit svc/my-tomcat ?编辑刚才创建的yaml文件 把type由ClusterIP改为NodePort,意思是说把30000这个端口映射到物理机上 再执行一下kubectl get svc,看一下冒号后面那个端口号 IP加上这个端口号,就能用浏览器访问了。 结尾此文章内容只是我学习k8s的一个粗略总结,各种细节无法涉及,希望对大家有所帮助。也希望大家能指出我的问题。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 15:00:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |