专栏首页Jerry的SAP技术分享Jerry的Kubernetes学习笔记

Jerry的Kubernetes学习笔记

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.blog.csdn.net/article/details/84844088

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

第一章

  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相关

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 通过describe命令学习Kubernetes的pod属性详解

    我们可以首先使用kubectl get pods命令得到pod列表,比如我们想研究pod nginx-storage-pod的明细:

    Jerry Wang
  • 在Kubernetes上运行SAP UI5应用(下)

    上一篇文章 在Kubernetes上运行SAP UI5应用(上),我介绍了如何在Docker里运行一个简单的SAP UI5应用,并且已经成功地将一个包含了这个U...

    Jerry Wang
  • 如何使用Kubernetes里的NetworkPolicy

    创建一个类型为NetworkPolicy的Kubernetes对象的yaml文件。

    Jerry Wang
  • 基于Kubernetes集群部署skyDNS服务

    在之前几篇文章的基础,(Centos7部署Kubernetes集群、基于kubernetes集群部署DashBoard、为Kubernetes集群部署本地镜像仓...

    用户1263954
  • 换域名scorpius.in

    之前的域名mxgw.info很长一段时间就已经被Google停止收录了,原因不明~

    libo1106
  • ERC20漏洞被这位大哥扒透了!满篇的代码废话少,程序员一定很喜欢

    大家下午好,我今天给大家演讲的题目叫做《安全工程师眼中的智能合约》,其实就是我眼中的智能合约。

    区块链大本营
  • 「走进k8s」Kubernetes1.15.1的Secret(27)

    PS:为了确保kubernetes集群的安全性,Api Server 都会给客户端进行身份认证,但是Pod访问Kubernetes Api Server服务时,...

    IT故事会
  • Jenkins流水线构建并发布.Net项目

    在Jenkins中实现CI / CD的方法有很多,例如Blue Ocean,Free Style项目和Declarative Pipeline。在本文中,我将解...

    泽阳
  • 青蛙的约会 POJ - 1061 扩展欧几里得解二元一次不定方程

    两只青蛙,起点分别为x,y ,每次可以跳m,n长度。(同方向跳)在长为 l 的圆表面,最少跳多少次相遇。

    用户2965768
  • 数据视化的三大绘图系统概述:base、lattice和ggplot2

    数据可视化是数据分析过程中探索性分析的一部分内容,可以直观展示数据集数据所具有的的特征和关联关系等。R语言不仅提供了基本的可视化系统graphics包,简单的图...

    1480

扫码关注云+社区

领取腾讯云代金券