Docker:kubernetes安装部署之二

目录

kubernetes集群在安装的时候要求有三种网络

kubernetes中各Pod的通信方式

kubernetes中Pod的与Service的通信

kubernetes中Etcd通信

kubernetes通过CNI来接入外部网络

部署前环境的梳理

 部署的方式

第一种部署形式

第二种部署形式

第三种部署方式

 开始部署

1、各节点时间同步

3、各节点IPtables及Firewalled服务被disable 

4、生成.repo文件指向阿里云仓库

5、安装kubelet、kubeadm(初始化集群指令)、 kubectl(api service的命令号客户端,Node不执行命令也可以不安装)

6、通过docker直接获取到的镜像文件,处于某种原因是直接获取不到的【通过docker save 保存;推到自己的私有仓库】

 7、docker随后会生成大量的iptables规则,会对我们内部的iptables  nf-call-iptables或者nf-call-ip6tables,会需要打开内生的桥接功能

8、初始化kubelet  【不能启动,只能设置开机自启;初始化工作还没有完成】

9、安装提示一步一步操作,查看集集群状态

10、部署Flannel  网络插件

11、节点加入到集群


kubernetes集群在安装的时候要求有三种网络

Pod(Pod网络):每个Pod运行在同一个网段中,可以Ping通

Service(集群网络):和Pod不在同一个网段,Service地址是虚拟的假的,存在IP tables或IPVS中

Node(节点网络):节点的网段又是独立的一个,Node节点的IP地址,即物理机(宿主机)的网卡地址

Docker:kubernetes安装部署之二_第1张图片

 这种网络Kubernetes不提供,需要于第三方依赖插件来解决,都可以托管在Kubermetes上,单Pod,或者守护进程来启动

提供网络服务: 提供IP

  • Flannel (叠加网络):网络配置

提供网络策略(IPtables规则):去定义来同一个名称空间内,容器内不能访问,各容器之间访问

  • Calico(三层隧道网络):网络配置,网络策略
  • Cannel:用Flannel提供网络,用Calico提供策略

kubernetes中各Pod的通信方式

1、同一个Pod内的多个容器间:通过lo(localhost)通信

在Kubernetes中是允许可个Pod直接通信的:

【桥接网络和叠加网络】

2、物理机桥接:二次通信在ARP的时候是进行广播的,Node在到达一定规模的时候,没有网络空间可以用了,不建议使用

3、叠加网络(Overlay Network):docker0桥固定使用一个子网方式,在docker0桥运行的容器也不会在冲突的了

kubernetes中Pod的与Service的通信

Service只是IP tables或IPVS规则,Node节点物理机只需要把目标地址不是自己的指向网关(docker0桥的地址),当容器一个容器试图访问一个Service是,送给网关(docker0桥的地址),Docker0桥只需要去检查下iptables或IPVS就可以发现Service的地址了

Service也是会改变的,创建,删除;Pod发生变化通过Label Select来发现,但是Service怎么来该表所有节点的Iptables或IPVS规则尼?这里就需要Kube-proxy组件来进行管理

kubernetes中Etcd通信

Etcd通信,一个端口向内部(集群内部)通信,一个端口向外部(客户端)通信;

基于敏感信息使用https通信,在内部通信的时候需要使用点对点的通信,需要一套私有CA证书;

Etcd于客户端(API service)通信提供服务,而服务端的证书于客户端验证是靠同一CA签署来实现,也就是说Etcd和API  Service的通信是要双向认证的,需要需要一套专用CA证书,;

API Service于客户但通信的时候也需要一套私有的CA证书,同Etcd和API Service原理;

API  Service于可Node的Kube-Proxy通信也是需要一套私有的CA证书,同Etcd和API Service原理;

API  Service于可Node的Kubelet通信也是需要一套私有的CA证书,同Etcd和API Service原理;

因此自己搭建的化需要5套私有的CA

kubernetes通过CNI来接入外部网络

CNI:容器网络接口  

这些网络可以已Pod的方式运行为其他Pod提供网络服务,这个Pod是个特殊Pod虽然托管在集群中间,但他们需要共享他们的网络名称空间(看到的是物理机的IP)

部署前环境的梳理

Kubernetes架构简易图

Docker:kubernetes安装部署之二_第2张图片

 环境部署图

Docker:kubernetes安装部署之二_第3张图片

 部署的方式

部署的方式有两种

第一种部署形式

用传统的形式部署Kubernetes的Master的4个组件和Node节点上3个组件为系统级守护进程,自己去配置证书、配置文件、安装、等等,配置过程繁琐而复杂,一般首次搭建不建议常用

第二种部署形式

使用工具搭建,在github有人把用Playbook,只需要告诉Ansible谁是Master,谁是Node就可以,这种方式也是把把各组件部署为系统级的守护进程,这种方式Control-Manager宕机了,还需要自己去启动,没有办法保证了宕机后在启动

第三种部署方式

使用Kubeabm工具来安装,

每个主机上都会安装Kubelet,docker(包括Master), 把主机A初始化为Master,主机B,主机C初始化为Node,每个主机都会Pod的形式来运行Master和Node的组件,这些Pod是静态Pod,而Flannerl是可以被Kubernetes管理的

Docker:kubernetes安装部署之二_第4张图片

 开始部署

安装前提

1、各节点时间同步

2、各节点主机名称解析:DNS or Hosts

[root@master ~]# cat  /etc/hosts

3、各节点IPtables及Firewalled服务被disable 

[root@master ~]# systemctl disable firewalld --now   #各节点和Master都执行
 

4、生成.repo文件指向阿里云仓库

[root@master yum.repos.d]# vim kubernets.repo

Docker:kubernetes安装部署之二_第5张图片

[root@master yum.repos.d]# yum replolist  #查看yum源的导入的结果

[root@master yum.repos.d]# scp kubernets.repo node2:/etc/yum.repos.d/  把报传给其他节点

5、安装kubelet、kubeadm(初始化集群指令)、 kubectl(api service的命令号客户端,Node不执行命令也可以不安装)

Index of /kubernetes/yum/doc/  可以获取key地址

[root@master yum.repos.d]# yum install kubelet kubeadm kubectl -y   #会报错

 [root@master yum.repos.d]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

[root@master yum.repos.d]# rpm --import yum-key.gpg 

Docker:kubernetes安装部署之二_第6张图片

6、通过docker直接获取到的镜像文件,处于某种原因是直接获取不到的【通过docker save 保存;推到自己的私有仓库】

[root@master ~]# vim /usr/lib/systemd/system/docker.service   #修改docker的配置文件,指向可以访问到的镜像文件的地址,做代理获取到镜像

Docker:kubernetes安装部署之二_第7张图片

[root@master ~]# systemctl daemon-reload   #重新加载配置文件
[root@master ~]# systemctl restart docker   #重新启动docker

[root@master ~]# docker info             #加载成功

Docker:kubernetes安装部署之二_第8张图片

 7、docker随后会生成大量的iptables规则,会对我们内部的iptables  nf-call-iptables或者nf-call-ip6tables,会需要打开内生的桥接功能

[root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables    #保证为1

[root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables  #保证为1

8、初始化kubelet  【不能启动,只能设置开机自启;初始化工作还没有完成】

[root@master ~]# rpm -ql kubelet   #查看配置文件
Docker:kubernetes安装部署之二_第9张图片
[root@master ~]# vim /etc/sysconfig/kubelet   【忽略swap交换分区的报警,以前的版本必须关闭swap           】

[root@master ~]# systemctl enable docker    #设置开机自启   
[root@master ~]# systemctl enable kubelet    #设置开机自启
[root@master ~]# [root@master ~]# kubeadm init --kubernetes-version=stable --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --image-repository=registry.aliyuncs.com/google_containers
   #初始化拉取相关镜像,初始化成功
Docker:kubernetes安装部署之二_第10张图片

9、安装提示一步一步操作,查看集集群状态

[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# kubectl get cs   #查看集群状态 【componentstatus】
Docker:kubernetes安装部署之二_第11张图片

 [root@master ~]# kubectl get nodes  #获取节点信息

10、部署Flannel  网络插件

【安装地址:https://github.com/flannel-io/flannel】会基于此清单,下载Flannel清单,部署镜像

Docker:kubernetes安装部署之二_第12张图片

 [root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Docker:kubernetes安装部署之二_第13张图片

 [root@master ~]# kubectl get pods  【并没有启动起来】

 [root@master ~]# kubectl get pods -n kube-system   #新的名称空间kube-system,当前节点永兴的pods
Docker:kubernetes安装部署之二_第14张图片

 [root@master ~]# kubectl get ns  #获取名称空间
Docker:kubernetes安装部署之二_第15张图片

11、节点加入到集群

 [root@node1 ~]# kubeadm join 192.168.1.104:6443 --token hk5m0i.lad4qho7pkohq8s2 --discovery-token-ca-cert-hash sha256:be41b4aa8b69e6895a386de4ce4969b33ebff12137085b51a01fd48c318e894a --ignore-preflight-errors=Swap
Docker:kubernetes安装部署之二_第16张图片

[root@master harbor]# kubectl get nodes  #查看添加的结果,node1已经添加到集群中 

发现node1上的镜像状态时:NotReady:

[root@node1 ~]# docker image ls  #容器的Status的变成Ready状态,一、镜像下载完成,二、启动成功】

 [root@master harbor]# kubectl get pods -n kube-system -o wide  #查看信息 已启动

Docker:kubernetes安装部署之二_第17张图片[root@master harbor]# kubectl get nodes #已启动完成

 

 

 


 

 

你可能感兴趣的:(Dokcer+K8S,kubernetes,docker,java,容器)