k8s的主要功能

一、什么是k8s,k8s都有什么功能?

k8s是一个docker容器管理工具

二、k8s的核心功能

自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。

弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量

服务的自动发现和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。

滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。 

三、k8s的应用场景

k8s最适合跑微服务架构

3.1 k8s常用的资源

3.1.1 创建pod资源

k8s yaml的主要组成

  apiVersion: v1 api版本                                                                                                                                                            kind: pod 资源类型                                                                                                                                                                metadata: 属性                                                                                                                                                                      spec: 详细                                                                                                                                                                          

3.1.2 创建一个pod.yaml文件


pod资源是k8s里面最小的资源,构建pod资源的至少需要两个容器组成,pod基础容器和业 容器组成


pod配置文件2:


3.2.1  ReplicationController资源

ReplicationController资源 也叫rc资源

rc:保证指定数量的pod始终存活,rc通过标签选择器来关联pod

k8s资源的常见操作:

创建一个rc yaml文件


rc可以做资源回滚升级 我们下面写一个基于上面rc资源写升级nginx升级为1.15版的


备注:左图是升级前rc资源的图,右图是升级后的rc资源图

升级 kubectl rolling-update nginx -f nginx-rc1.15.yaml --update-period=10s

这个是rc的资源升级命令        --update-period=10s这个是10.秒更新一个pod资源

回滚 kubectl rolling-update nginx2 -f nginx-rc.yaml --update-period=1s

这个是回滚的命令,如果升级的新版本有问题就马上回滚到上个稳定的版本中

3.3.1service资源

原理:kubernetes中,在受RC调控的时候,pod副本是变化的,对于的虚拟的ip地址也是变化的,比如发生迁移或者伸缩的时候。这就是对于pod资源的访问者来说是不可接受的,kubernetes中的service是一种抽象的概念,它的定义就是一个pod逻辑集合以及访问的它们的策略,service同pod的关联同样是居于lable来完成的service的目标的提供一种桥梁,它会为访问者提供一个固定访问地址,用于在访问时重定向到相应的后端,这使的非kubernetes原生态应用程序,在无须kubernetes编写特定代码的前提下,轻松访问后端。

service同rc一样,都是通过label来关联的pod的,当你在service的yaml文件中定义了该service的selector中的label为   app: myweb ,那么这个service会将pod-->metadata-->label中为app:myweb 的pod就可以作为发请求后端。当pod发生变化时(增加,减少,重建等),service会及是更新的,这样一来,service就是可以作为pod的访问入口,起到代理的作用,而对于访问者来说,通过service进行访问无需告状pod资源。(需要注意的是,kubernetes是通过kube-proxy组件来实现的虚拟IP路由及转发的,所以在之前集群部署的环节上,我们在每个node上都部署了proxy这个组件,从而实现了kubernetes层的虚拟网络转发)

service的内部网络负载均衡

     当service的endpoints包含多个ip地址时,及服务代理存在多个后端,将进行请求的负载均衡。默认的负载均衡策略是轮询或者随机,同时,service上通过设置service--->spec--->sesionaffinity=clientip来实现基于源IP地址的会话保持

service自发机制

kubernetes中有一个重要的服务就是自发性,一旦一个service被创建,该service的service的ip和serviceponrt的资源等信息就会记录到pod的资源中供它们使用

service帮助pod暴露端口

创建一个service


修改nodePort范围

   vim /etc/kubernetes/apiserver                                                                                                                                               KUBE_API_ARGS="--service-node-port-range=3000-50000"

service默认使用iptables来实现负载均衡, k8s 1.8新版本中推荐使用lvs(四层负载均衡)

3.4 deployment资源

kubernetes提供的一种更加简单的更新rc和pod资源的机制,叫做delpoyment,通过deployment中描述所期望的集群状态,deployment 会将现在的集群状态在一个可控的速度下琢步更新你所期望的集群状态deployment 主要 的职责同样是为了保证pod的数量和健康90%的功能与rc资源完全一样,可以看到新一代的rc,但是,它又具备了rc之外的新特性:                    rc的全部功能:deploument继承了上面的描述的rc全部功能                                                                                                  事件和状态查看:可以查看deployment的升级详情进度和状态。                                                                                          回滚:当升级的pod镜像或者相关参数时候发现问题,可以使用回滚的操作回滚到上一个稳定的版本或者指定的版本                                                                                                                                                                                                   版本记录:每一次deployment的操作,都可以保存下来,给予后续可能回滚的使用                                                             暂停和启动: 对于每一次升级,都能够随时暂停和启动                                                                                                       多种升级方案:删除所有已存在的pod,重新创建新的,滚动升级,琢步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大的不可用pod数量,最小升级间隔离时间等等。

创建deployment


deployment升级和回滚                                                                                                                                                          命令行创建deployment                                                                                                                                                          kubectl run nginx --image=10.0.0.11:5000/nginx:1.13 --replicas=3 --record                                                                      命令行升级版本                                                                                                                                                                      kubectl set image deploy nginx nginx=10.0.0.11:5000/nginx:1.15                                                                                        查看deployment所有历史版本                                                                                                                                               kubectl rollout history deployment nginx                                                                                                                                deployment回滚到上一个版本                                                                                                                                               kubectl rollout undo deployment nginx                                                                                                                                  deployment回滚到指定版本                                                                                                                                                  kubectl rollout undo deployment nginx --to-revision=2  

kubeadm安装k8s1.13 - 技术之路

4:k8s的附加组件


4.1 dns服务

安装dns服务                                                                                                                                                                          1:下载dns_docker镜像包                                                                                                                                                            wget http://192.168.12.201/docker_image/docker_k8s_dns.tar.gz ###这个包电脑里面有这个地址不能下载                   2:导入dns_docker镜像包(node2节点)                                                                                                                                   3:修改skydns-rc.yaml                                                                                                                                                           


 4:创建dns服务            ###这些yaml文件都是本地写好的上传上去的                                                                                     kubectl create -f skydns-rc.yaml                                                                                                                                         5:检查                                                                                                                                                                                      kubectl get all --namespace=kube-system                                                                                                                            6:修改所有node节点kubelet的配置文件                                                                                                                                  vim /etc/kubernetes/kubelet                                                                                                                                                   KUBELET_ARGS="--cluster_dns=10.254.230.254 --cluster_domain=cluster.local"                                                             systemctl restart kubelet       


4.2 namespace命令空间

namespace做资源隔离

 kubectl create namespace   &&&   ###这个写你要创建的名字                                                                                         kubectl delete namespace   &&&   ### 这个写你要删除的名字                                                                                           kubectl get namespace            ####查看你已经创建的

4.3 健康检查


4.3.1 探针的种类

  livenessProbe:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器                                                      readinessProbe:可用性检查,周期性检查服务是否可用,不可用将从service的endpoints中移除                                  


4.3.2 探针的检测方法

* exec:执行一段命令                                                                                                                                                          *  httpGet:检测某个 http 请求的返回状态码                                                                                                                        *  tcpSocket:测试某个端口是否能够连接                                    


4.3.3 liveness探针的exec使用



4.3.4 liveness探针的httpGet使用



4.3.5 liveness探针的tcpSocket使用



4.3.6 readiness探针的httpGet使用



4.4 dashboard服务

1:上传并导入镜像,打标签                                                                                                                                                       2:创建dashborad的deployment和service



3:访问http://10.0.0.11:8080/ui/


4.5 通过apiservicer反向代理访问service



5: k8s弹性伸缩

k8s弹性伸缩,需要附加插件heapster监控


5.1 安装heapster监控

1:上传并导入镜像,打标签

ls *.tar.gz for n in ls *.tar.gz ;do docker load -i $n ;done docker tag   

docker.io/kubernetes/heapster_grafana:v2.6.0 10.0.0.11:5000/heapster_grafana:v2.6.0 docker tag                                    docker.io/kubernetes/heapster_influxdb:v0.5 10.0.0.11:5000/heapster_influxdb:v0.5 docker tag                                        docker.io/kubernetes/heapster:canary 10.0.0.11:5000/heapster:canary                                                                             2:上传配置文件,kubectl create -f .                                                                                                                                           ###这几个文件在我自己电脑里面

3:打开dashboard验证 



5.2 弹性伸缩

1:修改rc的配置文件                                                                                                                                                                  ###这几个文件都是在我的电脑里面写完上传上去的

2:创建弹性伸缩规则

kubectl autoscale -n qiangge replicationcontroller myweb --max=8 --min=1 --cpu-percent=8  ##-n 是资源隔离的名字

3:测试

ab -n 1000000 -c 40 http://172.16.28.6/index.html   ###那个ip地址不是是随机不是是一样的


弹性伸缩是指定适应的负载变化,以弹性可伸缩的方式提供资源。反映到kubernetes中,指的是可根据负载均衡的高低动态调整pod副本数量,调整pod的副本数就是通过修改pod的副本来实现的


6:持久化存储

pv: persistent volume 全局的资源 pv,node

pvc: persistent volume claim 局部的资源(namespace)pod,rc,svc

6.1:安装nfs服务端(10.0.0.11)

yum install nfs-utils.x86_64 -y                                                                                                                                                mkdir /data                                                                                                                                                                               vim /etc/exports                                                                                                                                                                     /data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)                                                                                               systemctl start rpcbind                                                                                                                                                            systemctl start nfs


6.2:在node节点安装nfs客户端

yum install nfs-utils.x86_64 -y                                                                                                                                                 showmount -e 10.0.0.11


6.3:创建pv和pvc

上传yaml配置文件,创建pv和pvc

6.4:创建mysql-rc,pod模板里使用volume



6.5: 验证持久化

验证方法1:删除mysql的pod,数据库不丢

kubectl delete pod mysql-gt054

验证方法2:查看nfs服务端,是否有mysql的数据文件


file:///F:/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/%E4%BA%91%E8%AE%A1%E7%AE%97/k8sday03/k8s%E8%AF%BE%E7%A8%8Bday3.pdf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 1、基础架构 1.1 Master Master节点上面主要由四个模块组成:APIServer、scheduler...
    阿斯蒂芬2阅读 10,782评论 0 44
  • k8s容器编排 [TOC] 1:k8s集群的安装 1.1 k8s的架构 除了核心组件,还有一些推荐的Add-ons...
    Zh_bd92阅读 869评论 0 0
  • 一、 K8s 是什么? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群...
    loveroot阅读 6,586评论 1 21
  • 1.Pod Pod是k8s的最基本的操作单元,包含一个或多个紧密相关的容器,类似于豌豆荚的概念。一个Pod可以被一...
    jony456123阅读 7,326评论 0 5
  • 大家好,我是问题超多的女孩纸,喜欢发现全新的实物,喜欢打破沙锅问到底,对不懂的问题一定要研究清楚。今天,就来研究一...
    淼淼淼miao阅读 1,225评论 1 4