前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jerry的Kubernetes学习笔记

Jerry的Kubernetes学习笔记

作者头像
Jerry Wang
发布2019-05-31 18:44:22
1.9K0
发布2019-05-31 18:44:22
举报

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1440526

useful shell script

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 “.contexts0.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

第一章

  1. 为什么被8080refused了呢。别着急,还没有启动呢,这是没有成功连接kubernetes apiserver的节奏,一切正常,到目前为止,我们只是下载了一个可执行文件设置了权限而已。
  2. 用replicationcontroller创建pod,再创建service,暴露cluster IP. tcp访问。

kubelet是进程,向Master注册自己

  1. 一个pod内的容器与另外主机上的pod容器能够直接通信。

pod的ip加上containerport,组成了endpoint,代表pod里的一个服务进程的对外通信地址。

m:千分之一个CPU配额。

Master node上的Controller Manager定期巡检系统中存活的目标pod,确保其实例数量等于RC的期望值。

  1. 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会随销毁和重新创建而发生变化。

  1. 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域名。通过服务名建立通信连接。

  1. 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之外定义。

  1. namespace:多租户隔离

不同的分组在共享使用整个集群资源同时还能被分别管理. 默认是default。

  1. annotation

annotation和label类似,都是key/value, 但label有严格的naming convention,定义的是Kubernetes对象的元数据,而且用于label selector,而annotation是用户任意定义的附加信息,用于外部工具查找。

第二章

  1. 可在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相关

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • useful shell script
  • Terminology
  • 第一章
  • 第二章
  • 进度
  • Docker
  • learn from internet
  • minikube相关
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档