Kubernetes
文章平均质量分 84
基于Kubernetes1.8.6版本
Y。S。H。
成为什么样的人,只看他除了工作以外的时间
展开
-
K8s configmap配置
前提基于分布式的场景需求,应用都是会存在多个节点上的,对于随着应用的增加会带来很大的不便利,如果配置发生更改就要进行重新提交git、打包、分发,分发上线的工作就变得繁杂和沉重开源本身也提供了很多的解决方案,比如diamond、apollo、disconf等等,而k8s就是configmapconfigmap以非机密性的数据形式提供给Pod,实现分布式环境对配置信息的需求存储格式:K/V键值对使用方式:环境变量和挂载(volumes)创建方式:命令行创建和配置清单存储格式serv原创 2021-02-09 16:47:46 · 655 阅读 · 0 评论 -
K8s 滚动更新
Deployment特性事件和状态查看保存更新版本记录,支持回滚到指定版本可以实现多种自动更新方案暂停和启动,支持每次升级必要的暂停,以便是否继续以下的更新说白就是基于Pod的滚动更新高级支持,特性都是针对更新而言Deployment更新更新的是Pod模板下的内容,比如镜像文件,标签、存储等等,而怎么更新就由Deployment控制器完成更新策略:滚动更新和重新创建更新和回滚方式:yaml文件和命令行暂停更新方案:符合现实使用的更新方案更新策略滚动更新(默认):新旧版本原创 2021-02-19 18:43:16 · 1542 阅读 · 0 评论 -
K8s secret配置
secretsecret用于保存铭感信息,比如密码、ssh-key、令牌等等存储格式:K/V键值对使用方式:环境变量和挂载(volumes)密文方式:base64创建方式:命令行创建和配置清单使用场景:opaque:通用自定义数据,base64编码kubernetes.io/service-account-token:用于存储SA用户认证信息kubernetes.io/dockerconfigjson:用户存储docker仓库认证信息kubernetes.io/tls:用于tls通讯原创 2021-02-09 15:07:23 · 1818 阅读 · 0 评论 -
K8s 控制器(controller-manager)
前提对于k8s的自主式的Pod出现问题的解决方案Pod主进程发生故障,由kubelet根据重启策略进行操作恢复Pod程序发生故障,由存活性探测(liveness probe)进行故障通报,再进行重启策略问题:针对意外删除Pod或者节点故障导致的问题,Pod无法进行处理K8s 控制器通过绑定Pod进行监控其状态,实现满足用户预期的状态,通过控制器实现Pod生命周期中的各类自动管理行为,比如创建和删除(k8s的控制器存在很多种,针对资源类型不同)k8s依据资源类型分为5种工作负载:Pod原创 2021-02-04 18:45:02 · 1151 阅读 · 0 评论 -
K8s cni+flannel (cnm)
CNI 和 CNM都是针对容器网络的解决方案CNM: Docker 公司(docker container runtime 背后的公司)提出CNI:CoreOS公司提出,项目被接纳托管到 CNCFCNMdocker默认网络模式host:共享主机网络Network namespacebridge:桥接主机网卡none:容器有独立的Network namespace,但是没有网络配置(常用测试使用)这样的几种网络方式是无法满足容器互联需求的CNM定义Libnetwork是CNM原创 2021-02-03 13:58:35 · 867 阅读 · 0 评论 -
K8s PV和PVC(动态)
存储类(StorageClass)当用户需要使用存储时,需要通过PVC进行绑定PV,有几种情况会出现问题PVC需求匹配不到需要的PVPVC需求量很大的时候用户需求无法确定的常见,会随着环境而改变存储类就是为了实现PV动态供给,对于PV进行分组管理,管理员可以自定义级别或者功能来区分使用...原创 2021-01-27 19:19:13 · 1850 阅读 · 0 评论 -
K8s PV和PVC(静态)
k8s存储卷的使用问题配置信息透明化,存在安全隐患存储定义信息对于用户角度来说复杂且没有必要,用户对于存储就是使用即可PV和PVC为了实现用户和集群管理员的解耦,添加了一个抽象层(也就是由管理员配置好,用户直接使用)PV(persistentvolume):...原创 2021-01-25 19:48:50 · 771 阅读 · 1 评论 -
K8s 存储卷配置
docker存储容器删除,数据也删除,针对需要应用持久化的数据就要配置存储,常见就是基于存储到节点上(而节点存储可以是NFS、ceph、iscsi等等)K8s的Pod存储由于Pod是基于容器的集合,基于pause容器实现存储共享K8s 存储卷存储卷作用就是由于容器的结构,数据会随着容器删除而删除,那么Pod对于需要数据的共享和持久化就需要借助存储卷配置1、使用配置结构docker:docker的存储使用是直接相对于容器本身配置资源,基于节点目录或者NFS,ceph都要基于节点上配原创 2021-01-24 00:56:48 · 605 阅读 · 0 评论 -
K8S Pod配置进阶1 containers字段解释
k8s为什么需要Pod作为资源最小单位容器本身的使用都是基于单进程(包括子进程),也就是命名空间里进程为1的,可以接受并处理信号,所以进程终止容器就退出了IPC-进程间通讯:一般来说,一个app只有一个进程,但是在一些需要多进程的程序或者远程服务调用时,就需要跨进程通信UTS-主机名:需要依赖于hostname的应用appNetwork:需要容器拥有一样的IP、路由等网络资源怎么考虑需要把多个容器放到一个Pod中辅助容器:作为辅助主应用的容器,比如收集log日志agent容器代理容器:主原创 2021-01-21 19:31:06 · 4455 阅读 · 0 评论 -
k8s 关于apiVersion的选择思考
Kubernetes API 是基于资源的(RESTful)、通过 HTTP 提供的编程接口REST:REpresentational State Transfer 直接翻译就是表现层状态转移,这样不便于理解首先,之所以晦涩是因为前面主语被去掉了,全称是 Resource Representational State Transfer:通俗来讲就是:资源在网络中以某种表现形式进行状态转移。Resource:资源,即数据(前面说过网络的核心)。比如 newsfeed,friends等;Represe原创 2021-01-15 10:51:48 · 1778 阅读 · 0 评论 -
k8s 网络工具 nsenter
k8s 工具借助nsenter命令进入容器命名空间进行抓包和网络诊断#!/bin/bashns=$1 #传参1:命名空间pod_name=$2 #传参2:pod名称Container_id=$(kubectl describe pod -n $ns $pod_name | grep "Container ID:" | cut -d '/' -f 3 | cut -c 1-12)node=$(kubectl get pods -n $ns $pod_name -o wide | a原创 2021-01-13 17:42:15 · 784 阅读 · 0 评论 -
CoreDNS 部署及分析
Kubernetes DNS服务基础知识CoreDNS作用Server实现了POD地址的固定,DNS可以实现访问Server的名称访问到POD(服务发现)对于一些服务提前不知道Server地址,但是要基于服务配置,就可以直接使用Server的名称,后期只要创建这样名称即可CoreDNS 部署DNS服务是依赖于server访问,地址就是ClusterIP,需要固定IP(需要和kubelet的参数指定一样–cluster-dns=10.0.0.2)DNS服务基于deployment部署集群认原创 2021-01-13 11:58:43 · 2364 阅读 · 0 评论 -
kube-proxy ipvs模式分析
负载均衡资源k8s的核心功能就是基于POD的多副本实现负载均衡,负载基于所有的节点或者master节点(功能是kube-proxy提供)三种模式(默认为iptables)userspace :由node节点随机端口,任何连接到“代理端口”的请求,都会被代理到 Service 的backend Pods 中的某个上面(实际是根据Endpoints中)iptables 代理模式:通过API Server的Watch接口实时跟踪Service与Endpoint的变更信息,并更新对应的iptables规则原创 2021-01-11 17:47:24 · 932 阅读 · 0 评论 -
k8s 二进制安装 node节点
node节点部署几点问题node节点部署可以不涉及证书复制,通过kubectl config 生成认证和授权(整个集群的访问都是要通过认证和授权二个阶段)node节点的网络可以基于docker自身的cni和网络插件(flannel)完成网络的功能(区别在于docker自带的只能docker使用)授权是基于用户名,kubelet和kube-porxy都需要通过角色授权访问资源一个节点部署完成后,其他节点可以直接使用配合文件(只要修改节点显示名称–hostname-override=k8s-nodex原创 2021-01-07 17:14:20 · 400 阅读 · 0 评论 -
k8s 二进制安装master(单master)
环境准备关闭防火墙和selinux关闭swap分区swap分区会影响到容器设置hosts可以把服务器都是设置成域名的方式,以便日后的ip更改设置桥接的IPv4流量传递到iptables的链由于网桥工作于数据链路层,在iptables没有开启 bridge-nf时,数据会直接经过网桥转发,结果就是对FORWARD的设置失效,centos默认不开启 bridge-nf集群时间同步集群需要时间的同步,避免发生未知错误关闭swap分区swapoff -a # 临时sed -ri ‘原创 2021-01-05 10:26:33 · 490 阅读 · 0 评论 -
k8s 手动部署flannel(k8s基于cnm网络插件)
环境准备安装etcd,并配置key存储网络信息etcd的秘钥文件复制到各个节点包括主节点(并授权)scp /opt/etcd/ssl/* root@192.168.12.11:/opt/etcd/sslchmod 755 /opt/etcd/ssl由于flannel不支持etcd-v3,需要开启etcd-v2版本#[Clustering]ETCD_ENABLE_V2="true"systemctl restart etcd存储flannel的网络信息vi flannel原创 2020-12-31 09:49:40 · 984 阅读 · 0 评论 -
Kubernetes 健康探测
Pod的生命周期中存在2种健康探测,Readiness和Liveness是保证Pod容器正常运行的关键检测手段。1、零停机部署2、避免无效的Pod导致服务中断3、更加安全的滚动升级由 kubelet 对容器执行的定期诊断。要执行诊断,kubelet 调用由容器实现的 Handler默认健康探测默认是基于容器的dockerfile中的CMD或ENTRYPOINT指定的,容器进程退出代表故障处理方法就是进入重启策略(restartPolicy,默认为Always)这个阶段还是属于容器自身状态原创 2020-09-07 10:39:27 · 203 阅读 · 0 评论 -
Kubernetes DNS服务
Kubernetes中kube-dns系统组件唯一是基于deployment资源管理器,并通过Service来通讯,很多应用前提都是要基于DNS组件来完成DNS A记录的自动产生基于Service NAME字段产生A记录,格式:svc名称.当前命名空间.当前集群的域名(默认就是svc.cluser.local ),比如:busybox1.default.svc.cluster.local基于Pod的主机名产生A记录,需要基于hostname和subdomain指定,格式:hostname.subd原创 2020-09-03 17:30:36 · 292 阅读 · 1 评论 -
Kubernetes Service服务
最简单的已经通过yaml文件把容器跑起来了,这个时候就是网络通讯的问题了K8s是基于扁平化的网络,也就是所有的Pod和node节点都是互通的docker run 是基于-p 作为映射端口,而yaml文件里写的ports并不是这个功能,前面也说了扁平化,说明这个参数并没有用,只是为了方便Pod中查看而已Pod也有一个单独IP地址的IT产品的解决方案通常都是加一层,那么这层就是K8s的Service服务哪些场景需要Service服务?集群外部需要访问到Pod应用集群内部Pod与Pod之间原创 2020-09-01 22:28:06 · 293 阅读 · 0 评论 -
Kubernetes Yaml文件格式
语法要求大小写敏感使用缩进表示层级关系缩进时不允许使用Tab键,只允许使用空格缩进的空格数目不重要,只要相同层级的元素左侧对齐即可# 表示注释,从这个字符一直到行尾,都会被解析器忽略数据结构对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)纯量(scalars):单个的、不可再分的值对象类型:对象的一组键值对,使用冒号结构表示(冒号后面必须空格后在原创 2020-09-01 16:02:28 · 207 阅读 · 0 评论 -
Kubernetes Pod生命周期
Pod生命周期第一阶段:Pod环境初始化第二阶段:容器初始化第三阶段:Pod生成容器初始化Pause是Pod的第一个启动容器,负责资源的共享(使Pod容器属于一个namespace下)Init容器是Pod启动前的一个必要条件,当然也可以没有,主要是为了确保Pod的正常安全运行Init容器类似脚本运行,只要运行成功后就被销毁Init容器可以多个,但是运行下一个之前确保上一个已经完成Init容器失败后,Pod会一直重启(受到restartPolicy控制,默认Always)Init原创 2020-08-30 18:29:27 · 125 阅读 · 0 评论 -
Kubernetes 安装几点说明
1、安装方式基于二进制包一步一步安装(对于学习认识系统有帮助)以守护进程存在基于kubeadm工具快速安装(推荐)以docker形式存在(其实是K8s的pod)2、系统内核版本最好升到4.4以上,不然容易出现各种奇怪问题3、安装包下载K8s是google公司基于Borg系统开源的项目,所以安装包全部在google网站上,国内是禁止掉的,目前可以基于阿里云镜像源可以安装最新版到Kubernetes-1.18.6,需要指定版本安装阿里云源cat <<EOF >原创 2020-08-29 18:36:26 · 194 阅读 · 0 评论 -
Kubernetes Pod组件和网络通信
容器的有状态和无状态容器本身应用是针对无状态服务的,也就是在一个集群应用中,应用是可以停止然后恢复还能进行服务的,比如web服务,IPVS等等,对于数据库这样的有状态服务是K8s的目标,目前也有针对的控制组件叫StatefulSetPod组件Pod 是 Kubernetes 的最小工作单元,是一个或多个容器的集合单位。Pod的好处在于:方便管理,有些应用必定跟其他应用是频繁交互,并且是需要共享资源和网络的,这样用Pod来管理是很需要的(有点类似Docker-compose,但是Pod功能更强大和方便原创 2020-08-25 14:59:12 · 403 阅读 · 0 评论 -
Kubernetes 基础组件
容器资源控制器MESOS(APACHE)Docker Swarm(Docker)Kubernetes (Goole)Kubernetes架构组件kubectl:K8s的命令行管理工具Master节点属于K8s的大脑API Server:所有服务的访问入口,外部唯一能访问到容器的方式scheduler:负责任务的节点选择和分配,关于多节点必要都需要调度器controller-manager:属于Pod的控制器,目的是维持副本的期望数量,属于冗余方案Etcd:键值对数据库,储存K8原创 2020-08-25 10:52:40 · 121 阅读 · 0 评论