目录1、k8s简介1、k8s是什么2、k8s特性3、k8s集群体系结构和组件4、k8s核心概念2、自签名SSL证书3、k8s三种部署方式4、k8s单节点部署(etcd )。
一、k8s简介1、什么是k8s kubernetes是谷歌2014年开源的容器集群管理系统,kubernetes简称k8s
k8s用于部署集装箱化APP应用程序,k8s的扩展和管理提供了容器组织、资源调度、灵活扩展、部署管理、服务发现等一系列功能。 kubernetes的目标是轻松高效地部署容器化APP应用程序。 http://www.kubernetes.io 2,k8s特性的自我修复
在节点故障时重新启动失败的容器,进行更换和重新部署,保证预期的拷贝数; 通过杀死未通过运行状况检查的容器,并在未准备好之前不处理客户端请求,来确保在线服务不会中断。 弹性伸缩
通过基于命令、UI或CPU利用率自动快速扩展和收缩APP应用实例,确保APP应用程序业务在并发使用全面的小型蚂蚁时具有高可用性; 在业务高峰期回收资源,以最低成本执行服务。 自动化部署和回滚
K8S使用一次更新一个Pod的滚动更新策略更新APP应用程序,而不是同时删除所有Pod,如果更新过程中出现问题,它会回滚更改,以避免升级影响业务。 服务发现和负载平衡
K8S为多个容器提供统一访问入口(内部IP地址和DNS名称),并对所有相关容器进行负载平衡,因此用户无需考虑容器的IP问题。 机密性和配置管理
管理敏感数据和APP配置,而无需镜像敏感数据,从而提高敏感数据的安全性。 您也可以将常规设置保存在K8S中,以便于APP应用程序使用。 存储组织
从本地存储器、公共云(如AWS )或网络存储器(如NFS、GlusterFS或Ceph )装载外部存储系统,可以大大提高存储灵活性。 批处理
满足一次性任务、定时任务批量数据处理和分析的场景3、k8s集群体系结构和组件
master 组件
kube-apiserver
在Kubernetes API、集群集成门户、组件协调器、rest风格的API中提供接口服务,所有目标资源的添加/删除调查和侦听操作都交给APIServer处理后,Etcd存储kube -控制管理器
处理集群中的常规后台任务。 一个资源对应于一个控制器,控制器管理器负责管理这些控制器。 kube-scheduler
根据调度算法选择新创建的Pod的节点。 任何部署都可以部署到同一个节点,也可以部署到不同的节点。 etcd
Pod、Service等对象信息Node组件
kubelet
kubelet是主节点上的代理,用于管理容器运行的本机生命周期,包括创建容器、Pod装载数据卷、下载servlet以及获取容器和节点的状态kubelet将每个Pod转换为一系列容器kube-proxy
在节点上安装Pod网络代理,维护网络规则和4层负荷分散工作docker或rocket
集装箱引擎,集装箱4,k8s核心理念Pod
最小部署单元容器集一个Pod中的容器共享网络命名空间Pod为Controllers
ReplicaSet :确保预期的Pod拷贝数Deployment :部署无状态APP集:部署有状态APP集:所有节点都是同一个Pod作业的一次性任务Cronjob
防止Pod联合的一组Pod的访问策略Lable :定义标签并附加到资源,用于对象关联、查询和过滤的Namespaces :命名空间、逻辑隔离对象的Annotations 自签名SSL证书组件使用的证书etcdca.pem、server.pem、server-key.pemflannelca.pem、server.pem、server-key.PEM kube-apape server-key.key kube-proxy.pem、kube-proxy-key.pemkubectlca.PEM、admin.pem、admin-key.pem三、k8s三种配置方式
Minikube是一种可以在本地快速运行Kubernetes的工具,只有Kubernetes和尝试进行日常开发的用户才能使用kubeadm
Kubeadm还是一个提供kubeadm init和kubeadm join的工具,用于快速部署Kubernetes群集二进制软件包
建议您下载官方发布的二进制软件包,然后手动部署每个组件。 在配置Kubernetes群集的生产环境中,使用kubeadm和二进制安装4、k8s单节点部署(etcd )Service
strong> Master:192.168.223.10/24 kube-apiserver kube-controller-manager kube-scheduler etcdNode01:192.168.223.20/24 kubelet kube-proxy docker flannel etcdNode02:192.168.223.30/24 kubelet kube-proxy docker flannel etcdmaster操作:
[root@localhost ~]# mkdir k8s[root@localhost ~]# cd k8s/[root@localhost k8s]# ls #从宿主机拖进来etcd-cert.sh etcd.sh[root@localhost k8s]# mkdir etcd-cert[root@localhost k8s]# mv etcd-cert.sh etcd-cert下载证书制作工具:
[root@localhost k8s]# vim cfssl.shcurl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/xdddts/cfsslcurl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/xdddts/cfssljsoncurl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/xdddts/cfssl-certinfochmod +x /usr/local/xdddts/cfssl /usr/local/xdddts/cfssljson /usr/local/xdddts/cfssl-certinfo[root@localhost k8s]# bash cfssl.sh#下载cfssl官方包如果有证书制作工具的[root@localhost k8s]# cd /usr/local/xdddts/#宿主机直接拖进此目录cfssl cfssl-certinfo cfssljson[root@localhost k8s]# chmod + /usr/local/xdddts/*开始制作证书:
cfssl 生成证书工具 cfssljson通过传入json文件生成证书 cfssl-certinfo查看证书信息
源码安装etcd:
[root@localhost k8s]# lsetcd-cert etcd.sh etcd-v3.3.10-linux-amd64.tar.gz[root@localhost k8s]# tar zxvf etcd-v3.3.10-linux-amd64.tar.gzetcd-cert etcd.sh etcd-v3.3.10-linux-amd64 etcd-v3.3.10-linux-amd64.tar.gz[root@localhost k8s]# mkdir /opt/etcd/{cfg,xdddts,ssl} -p #配置文件,命令文件,证书[root@localhost k8s]# cd etcd-v3.3.10-linux-amd64/[root@localhost etcd-v3.3.10-linux-amd64]# lsDocumentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md[root@localhost etcd-v3.3.10-linux-amd64]# mv etcd etcdctl /opt/etcd/xdddts/[root@localhost k8s]# cd etcd-cert/[root@localhost etcd-cert]# lsca-config.json ca.csr ca-csr.json ca-key.pem ca.pem etcd-cert.sh server.csr server-csr.json server-key.pem server.pem[root@localhost etcd-cert]# mv *.pem /opt/etcd/ssl#证书拷贝[root@localhost k8s]# bash etcd.sh etcd01 192.168.223.10 etcd02=https://192.168.223.20:2380,etcd03=https://192.168.223.30:2380#进入卡住状态等待其他节点加入[root@localhost ~]# ps -ef | grep etcd#使用另外一个会话打开,会发现etcd进程已经开启将证书和启动脚本推送/复制到两台node节点中
[root@localhost k8s]# scp -r /opt/etcd/ root@192.168.223.20:/opt/#拷贝证书去其他节点[root@localhost k8s]# scp -r /opt/etcd/ root@192.168.223.30:/opt#拷贝证书去其他节点[root@localhost k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.223.20:/usr/lib/systemd/system/#启动脚本拷贝其他节点[root@localhost k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.223.30:/usr/lib/systemd/system/#启动脚本拷贝其他节点在node01和node02节点修改
[root@localhost ~]# vim /opt/etcd/cfg/etcd#[Member]ETCD_NAME="etcd02"ETCD_DATA_DIR="/var/lib/etcd/default.etcd"ETCD_LISTEN_PEER_URLS="https://192.168.223.20:2380"#ip地址修改对应的node节点ETCD_LISTEN_CLIENT_URLS="https://192.168.223.20:2379"#ip地址修改对应的node节点#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.223.30:2380"#ip地址修改对应的node节点ETCD_ADVERTISE_CLIENT_URLS="https://192.168.223.30:2379"#ip地址修改对应的node节点ETCD_INITIAL_CLUSTER="etcd01=https://192.168.241.20:2380,etcd02=https://192.168.241.4:2380,etcd03=https://192.168.241.3:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_INITIAL_CLUSTER_STATE="new"[root@localhost ssl]# systemctl start etcd[root@localhost ssl]# systemctl enable etcd[root@localhost ssl]# systemctl status etcd在Master检查集群状态
检查群集状态(需要在有证书的目录下使用此命令)
etcd部署完毕