想在集群外部访问集群内部服务该如何,在k8s集群内部,pod对整个集群都是可见的,但是跨越集群步可以没因为是私有地址,
在k8s上可以定义一种ingress组件,入站请求组件,把url映射出去,/tomcat
尝试去部署一个k8s集群,三个节点
kubernetes_installation.pdfa安装文档
69扮演三个角色,etcd,master,registry私有仓库,,chrony server集群中的时间需要同步
**node3 当master **
做一下免密登录
把文件复制过去,名称解析,时间同步都ok了,确保每个节点都配置extras仓库
确保防火墙关闭,并且开机不自启动
etcd其实就是kv store存储
leader election 领导选举
centralized locking 中心锁 ,分布式锁
仅用于服务注册和服务发现的,airbnbmsmartstack,netflix的eureka,bitly的nsq lookupd serf,skydns
简单来讲,etcd就是一个开源的键值存储,支持服务发现,支持leader选举功能
etcd使用go语言研发,类似zookeeper,访问接口是http+json格式的API。,rusltfull风格的api接口
配置文件
unit file
etcd。service
输出的是api,就需要编程交互,也有客户端工具,etcdctl
etcd默认监听在2379和2380的tcp
2379用于向客户端提供存取服务的
2380用来实现集群间协调服务的
(redis也是,客户端服务一个端口,集群服务一个端口)
这些其实都是传递给etcd命令的各种参数
可以改成当前节点的名称
通过哪一个地址和端口向客户端提供服务
集群交互式监听的地址和端口,集群协作时,我们现在就一个
集群相关配置段
向外通告,用哪个url接收用户请求,应该跟之前定义的监听端口保持一致
协调集群事务时通过哪个url进行
与上面的保持一致,如果启用
有三个节点,每个主机各自有两个端口,一个是用来接收客户端请求的,一个用来协调集群事务的
每一个对应端口需要通告给集群中的每一个节点
先通告哪一个端口是用来接收客户端请求的
**作为集群成员要listen peer urls,也是对外的地址,
inital advertise peer urls 通告的地址 **
访问应该使用这个端点来访问etcd
可以用etcdctl来测试
指明向哪个节点发出请求
集群当前健康与否
动态添加节点
ls查看目录,mkdir创建目录,rmdir删除目录
set设定键值
get获取键值
rm删除键
watch监控键的改变
user添加用户授权
backup备份
mk赋予键值对
get获取值,set修改设定值
rmdir删除目录可以递归
删除非空目录,需要使用rm -r递归
单机性能大概一秒10000的键存进去,做成集群性能可能更高点
部署master
master只要安装master
node只需要安装node
三个unitfile
apiserver 真正监听用户请求
controller-manager
scheduler
配置文件 。etc/
config统一公共配置
有众多子命令
非安全协议监听的地址,用的http
默认的是监听api端口是8080
**每个kubelet通信的端口,默认10250
**
逗号隔开的etcd集群列表
k8s会运行很多服务,服务有很多静态地址在哪个范围内,默认是10.254的B类网络地址
默认控制策略,名称空间,生命周期,名称空间存在,资源限制limitranger
securitycontextdeny 安全上下文
serviceaccount 服务账户(启动了,访问服务,没有账号都无法访问)
resourcequota资源配额
自定义选项
不想要默认值添加即可
统一配置
对应日志发往标准错误输出,
日志级别
要不要允许node节点允许特权容器
默认监听就是8080,你的master地址
10251,10252用于其他主机通信的地址
安装私有registry,默认端口5000,为了支持更多链接可以用nginx反代
node1,2安装docker
add redistry指向私有的master仓库
这里使用insecure registry
另外主机配置文件一样复制过去
启动node1,2docker
pull一个镜像推送上本地
修改标签,推送上去随后其他节点都可以用 了
现在节点准备好,镜像也push上去了
现在要成为k8s的node
安装配置,指明主节点是什么
都安装-node
公共配置文件
各自的
unitfile
编辑配置文件
自己监听的地址
监听的端口,默认10250
当前节点的主机名,为空就是本机的主机名
master的apiserver地址
指明pod的基础架构容器
自定义选项
公共配置
改一下master即可
复制配置文件到node2
可以启动服务了
node2的主机名需要进行修改
地址服务ok
1.3以后,cAdivisor作为一个插件被直接整合进来,4194就是他的端口
kubectl命令可以探查
基础命令
部署命令
集群管理命令
排错的命令
高级命令
设置命令
其他命令
api-version api接口版本号是什么
batch批处理,autoscaling伸缩的
get可以知道运行了多少个pod
x详细信息
attach和exec与docker的非常相似
获取更多信息可以用dump
获取节点有哪些get
没有跑任何pod
基于镜像启动容器,一个容器必须属于一个pod
需要run一个容器
pull一个镜像下来
–dry-run干跑
replicas打算跑几个副本=2
真实跑一下试试,不允许使用下划线
names就是部署名
期望有2个pod,启动了2个
kube scheduler调度的结果,node2一个,node1一个
去node1和node2各自看一下,现在容器还没起来
因为默认允许在shell,shell一启动就中止了
-t附加一个终端,不然shell一启动就结束了,-h查看帮助
把刚才部署好没用的容器删除,删除一个centos7的部署
再启动一个pod
现在已经在容器内部了
查看日志调度到node2了
ctrl+p + ctrl+q,一样使用
可以重新链接
在kubernetes上这不是容器是pod
get查看,自动给你随机生成的名称,期望1个/ready1个 状态running
把整个容器停了应该会自动调度的
23秒之前恢复运行,确保一直运行
不要了,就用delete删除,terminating正在中止中
现在就没有 了
如何让两个容器彼此互相通信
waiting for是要pull镜像的
调度到node1上了.都是172.17。0.2两个容器都是这个地址就没办法通信,因此这种网络方式不符合我们期望的
把刚才的pod删除,开始配置kubernetes使用flannel网络,需要都安装flannel包,也需要把网络配置存到etcd中,所以要告诉它etcd在何处
node1,node2都需要安装,etcd是错误的
配置文件
运行时的数据
*
主程序
启动服务
在etcd上找个根目录/atomic.io,子目录下network,在找个子目录下找个网段即可
给kubernetest集群用的网段,这个网段地址需要自己手动设置,但是要求网段地址放在这个子目录下
复制到另外的节点上,启动之前需要做一个配置
需要用etcdctl做一个设置
-C表示连接到哪个服务器上,mk创建一个键,键名时config,键值对是{}
创建完成会在命令行显示一遍
三个节点都需要启动
启动以后随便找个节点看status
隧道桥,地址很诡异
docker0桥需要改变
docker0桥的地址,不再是172了
重启docker,docker会自动读取这个文件
node1,node2重启docker现在两个节点获得的容器应该地址不一样,但是另个应该可以互相直接通信的,基于隧道网络,用的是pod
手动启动一个docker试试
能ping通
在也 不用nat了,pod和pod就可以直接在平面下通信
从10.7.91.0.对10.。7。42
其实是发给隧道的
源地址目标地址,改成,0来进行通信的
在另外一侧应该是另外的结果
依然是从网络地址到主机地址的通信
ping目标以后i,源地址是一个网络地址,这个网络地址是你的大的子网,地址是10.7.0,子网网络之间进行通信时通畅,因为时基于隧道转发的
,
隧道的捕获报文其实时两层ip,内存ip地址时91.2,目标地址时4.2,respon地址是172,2,0.68,勾联之后生成的隧道