Jerry的Kubernetes学习笔记
是时候使用Helm了:Helm, Kubernetes的包管理工具
简化Kubernetes应用部署工具-Helm安装
Picking the Right Solution
吐槽安装的
Kubernetes on Ubuntu
Get Docker EE for Ubuntu
useful shell script
- which kubectl
- kubectl version
- 查看ubuntu版本:cat /etc/issue
- set proxy:
export http_proxy=http://duotai:xxxxx@jerrywang.vip:24448
export https_proxy=$http_proxy
Docker设置proxy的文件: /etc/default/docker
- docker pull hello-world
- docker run hellow-world
- kubectl cluster-info
To further debug and diagnose cluster problems, use ‘kubectl cluster-info dump’.
Unable to connect to the server: context deadline exceeded (Client.Timeout exceeded while awaiting headers)
- systemctl restart kube-apiserver
- kubectl get nodes
- kubectl get svc
- kubectl describe node
- kubectl get endpoints
- kubectl get svc tomcat-service -o yaml
- kubectl get namespaces --namespace=development
- systemctl daemon-reload
- systemctl enable etcd.service - 将服务加入开机启动列表
- systemctl start etcd.service
- kubectl run nginx --image=nginx:1.12.2
- etcdctl cluster-health - 验证etcd是否正确启动
- kubectl describe pods
- kubectl get pods -l environment=production,tier=frontend
- kubectl get pods -l ‘environment in (production),tier in (frontend)’
- export TILLER_NAMESPACE=$(kubectl config view -o json | jq -r “.contexts[0].context.namespace”)
- get -o wide json -o=yaml
- docker ps -a
- nginx image html position: /usr/share/nginx/html
etcd, kube-controller-manager, kube-scheduler这些
Terminology
- CRI Container Runtime Interface
第一章
为什么被8080refused了呢。别着急,还没有启动呢,这是没有成功连接kubernetes apiserver的节奏,一切正常,到目前为止,我们只是下载了一个可执行文件设置了权限而已。
用replicationcontroller创建pod,再创建service,暴露cluster IP. tcp访问。
kubelet是进程,向Master注册自己
- 一个pod内的容器与另外主机上的pod容器能够直接通信。
pod的ip加上containerport,组成了endpoint,代表pod里的一个服务进程的对外通信地址。
m:千分之一个CPU配额。
Master node上的Controller Manager定期巡检系统中存活的目标pod,确保其实例数量等于RC的期望值。
- Deployment -> Replication Set->Pod copy creation
检查Deployment状态来看部署动作是否完成
HPA:Horizontal Pod Autoscaling - 横向自动扩容
通过跟踪分析RC控制的所有目标POD的负载变化来确定是否需要针对性的调整目标POD的副本数。
监控CPU使用率,当前使用量 / yaml里的pod request。
HPA本身也是一种kind:HorizontalPodAutoscaler
service就是我们说的微服务。Pod和RC其实都是为Service做铺垫。
Service和后端pod副本集群间通过Label Selector实现无缝对接。
rc的作用:保证service的服务能力和质量始终处于预期的标准,服务之间通过TCP/IP通信。每个pod都有单独的IP,和containerPort一起组成了end point,那组成集群后的入口是什么?负载均衡器(软件或硬件),负责决定请求被转发到哪个pod。每个node上都运行了kube-proxy进程,实际就是一个智能的软件负载均衡器,负责把对service的请求转发到后端某个pod上,并在内部实现服务的负载均衡与会话保持机制。
每个service有一个全局唯一的虚拟IP地址,cluster IP,每个服务具有唯一IP地址的通信节点。整个生命周期内不变。内部pod的endpoint会随销毁和重新创建而发生变化。
- targetPort: 确定提供宫该服务的容器所暴露的端口号,即具体业务进程在容器内的targetPort上提供TCP/IP接入,而port属性则定义了service的虚端口。
服务发现 - 如何通过Service name找到cluster ip?
Cluster IP是Service创建后由Kubernetes自动分配的,其他pod无法预先知道某个service的cluster IP地址。因此需要一个服务发现机制来找到这个服务。
a. Service生成一些Linux环境变量,pod启动时注入环境变量。通过Add-On
增值包引入DNS系统,把服务名作为dns域名。通过服务名建立通信连接。
- Node ip:
node节点的IP地址。真实存在的物理网络,Kubernetes集群外的节点访问集群内的节点时,必须通过node ip进行通信。
很多服务都存在多个端口,一个端口提供业务服务,另一个端口提供管理服务。
Pod IP是每个pod的ip地址,是Docker engine根据docker0网桥的IP地址段进行分配的。通常是一个虚拟的二层网络。
一个pod里的容器访问另一个pod里的容器,就是通过pod IP所在的虚拟二层网络进行通信的,而真实的tcp/IP流量通过node IP所在的物理网卡流出。
Cluster IP没有一个实体网络对象,因此无法被ping。不具备TCP/IP通信基础,属于Kubernetes集群的封闭空间。
集群内部,node ip,pod IP,cluster IP之间的通信,采用的是一种特殊的路由规则,和IP路由完全不同。
使用nodeport同外界通信。
http://:
nodeport就是一个TCP监听端口。
GCE - google cloud engine
volume在pod中的意思是能被多个Docker访问的共享目录。
Kubernetes中的volume与pod的生命周期相同,但与容器的生命周期无关。
给volume定义一个名字,然后mount到docker的某个目录下。
volume类型:
emptyDir: pod分配到node时创建,初始内容为空,无须指定宿主机上对应的目录文件,由Kubernetes自动分配一个目录,当pod从node上移除时,emptyDir中的数据也被永久删除。
用于临时空间,一个容器需要从另一个容器中获取数据的目录。
hostPath:在pod上挂载宿主机上的文件或目录。
- 容器应用程序生成的日志文件需要永久保存。
- 需要访问宿主机上Docker引擎内部数据结构的容器应用,定义hostPath
为/var/lib/docker, 是容器内部应用可直接访问Docker上的文件系统。
PV只能是网络存储,不属于任何Node,但可以在每个node上访问。PV不是定义在node上的,而是独立于pod之外定义。
- namespace:多租户隔离
不同的分组在共享使用整个集群资源同时还能被分别管理. 默认是default。
- annotation
annotation和label类似,都是key/value, 但label有严格的naming convention,定义的是Kubernetes对象的元数据,而且用于label selector,而annotation是用户任意定义的附加信息,用于外部工具查找。
第二章
- 可在Google的GCE上安装。
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53
如果在DNS服务器处显示的是个人公司的内部网络地址,那么说明该公司的DNS解析工作是交给公司内部的DNS服务器来完成的,这时需要检查这个DNS服务器,在DNS服务器上进行nslookup操作看是否可以正常解析
工作node上仅需部署kubelet和kube-proxy服务进程。
Master与工作node间会有大量网络通信,在防火墙上需配置各组件需要相互通信的端口号。
etcd是Kubernetes集群的主数据库
Kubernetes各组件与Master之间通过apiserver的非安全端口http://apiserver:8080访问,但如果apiserver需要对外提供服务,或者集群中某些容器需要访问apiserver以获取集群中的某些信息,CA签名的双向数字证书认证。
google_containers/pause的镜像实现pod的概念
http://gcr.io
第二章有很多命令行参数。
进度
2018-11-12 11:02AM 看到P38 1.4.6 Deployment,飞机上14:16看到42页。
20:30, p46, 三种ip. 10:15 53 namespace 22:31第一章结束。
Docker
Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(译者注:镜像栈顶部)添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。
为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。
learn from internet
确保pod数量:它会确保Kubernetes中有指定数量的Pod在运行。如果少于指定数量的pod,Replication Controller会创建新的,反之则会删除掉多余的以保证Pod数量不变。
确保pod健康:当pod不健康,运行出错或者无法提供服务时,Replication Controller也会杀死不健康的pod,重新创建新的。
弹性伸缩 :在业务高峰或者低峰期的时候,可以通过Replication Controller动态的调整pod的数量来提高资源的利用率。同时,配置相应的监控功能(Hroizontal Pod Autoscaler),会定时自动从监控平台获取Replication Controller关联pod的整体资源使用情况,做到自动伸缩。
滚动升级:滚动升级为一种平滑的升级方式,通过逐步替换的策略,保证整体系统的稳定,在初始化升级的时候就可以及时发现和解决问题,避免问题不断扩大。
see:https://www.jianshu.com/p/6bc8e0ae65d1
Docker Swarm vs Kubernetes
minikube相关
- Kubectl: Kubernetes with minikube times out
Jerry的Kubernetes学习笔记相关推荐
- Kubernetes学习笔记(一)
2019独角兽企业重金招聘Python工程师标准>>> Kubernetes学习笔记(一) 博客分类: Kubernetes 导语 2015年4月,传闻已久的Borg论文伴随Kube ...
- kubernetes学习笔记 (二):k8s初体验
本文采用本地k8s v1.10.3版本开发,如果还没有搭建可参照 kubernetes学习笔记 (一):搭建本地k8s开发环境进行搭建 搭建本地Docker镜像仓库 docker pull docke ...
- Kubernetes学习笔记之Calico CNI Plugin源码解析(一)
女主宣言 今天小编为大家分享Kubernets Calico CNI Plugin的源码学习笔记,希望对正在学习k8s相关部分的同学有所帮助: PS:丰富的一线技术.多元化的表现形式,尽在" ...
- Kubernetes学习笔记-未整理
Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...
- Kubernetes学习笔记
Kubernetes学习笔记 1.简介 用于自动部署.扩缩和管理容器化应用程序的开源系统,支持自动化部署.大规模可伸缩. 2.架构 2.1.Control Plane 对集群做出全局决策 Contro ...
- Kubernetes学习笔记【2年以前的笔记】
Kubernetes学习笔记 知识储备 熟悉linux基础命令 熟悉docker的基本原理和操作 了解ssl证书工作原理 了解负载均衡工作原理(L4/L7) 了解分布式概念 了解域名解析原理 了解网络 ...
- Kubernetes学习笔记之Calico CNI Plugin源码解析(二)
女主宣言 今天小编继续为大家分享Kubernetes Calico CNI Plugin学习笔记,希望能对大家有所帮助. PS:丰富的一线技术.多元化的表现形式,尽在"360云计算" ...
- Kubernetes学习笔记三:Docker安装,Docker使用,编写Dockerfile,制作容器镜像,上传docker镜像
文章目录 Docker的安装 Docker的使用:docker run命令 查看本地存在的镜像:docker images命令 编写Dockerfile,制作容器镜像 docker build制作镜像 ...
- Kubernetes学习笔记二:Namespace,Cgroups 的隔离与应用
Kubernetes学习系列文章:Kubernetes-博客专栏 今天在学习极客时间专栏:<深入剖析Kubernetes> 第五讲05 | 白话容器基础(一):从进程说开去和第六讲06 | ...
最新文章
- java中的移位运算符
- win7怎么修改oracle登陆密码,win7账户密码如何修改|win7修改账户密码的详细步骤...
- c++在调用类的时候不一定非得实例化对象哦,有时候你不写系统会为你默认生成一个临时实例对象哦~
- 图解用tree命令研究Windows目录、.net目录、项目目录、JDK目录
- android函数未定义,android – 方法findViewById(int)未定义
- apache.camel_Apache Camel 3.1 – XML路由的快速加载
- Django REST framework 视图
- mooc作业怎么上传附件_交作业的一二三
- Redis 集群模式(Cluster)原理详解
- OpenCV获取不规则区域的最大内切圆(附Python / C++源码)
- 推荐程序员收藏的几个技术社区以及工具网站
- 猴子摘香蕉问题python_[转载]猴子摘香蕉问题的状态空间表示法
- 2019杭州电子科技大学计算机考研经验谈
- OSError解决办法
- 解决ThinkPad E580因AMD显卡导致系统崩溃的问题
- Node后台邮件服务器
- android8.1 source build/envsetup.sh分析 增加删除lunch
- 《食品真相大揭秘》摘录
- STM32F030F4P6低功耗模式
- EasyConnect
热门文章
- J2EE看tomcat运行参数和去掉工程名作为请求的根路径
- 文献记录(part28)--A rotation and scale invariant approach for multi-oriented floor plan image ...
- 文献学习(part33)--Clustering by fast search and find of density peaks
- 文献学习(part10)--元自步学习
- 投资学习网课笔记(part10)--基金第十课
- SAP UI5 初学者教程之二:SAP UI5 的引导过程(Bootstrap) 试读版
- SAP CRM 和 SAP Cloud for Customer 的表格列项目宽度调整的原理介绍
- 使用TestBed测试具有依赖关系的Angular服务
- SAP Spartacus ProductCarouselComponent
- 访问tomcat manager应用遇到的403 access denied错误