CreateArtTechnology
/ Blog
Login
最新文章
Java
语言相关
库相关
虚拟机相关
CreateArtTechnology
项目搭建
使用的工具
自研的工具
开源工具
ELK
ElasticSearch
Jenkins
Markdown
GraphQL
Arthas
生产工具
Linux
Nginx
VersionControl
Subversion
Git
Redis
Archiva
Maven
Zookeeper
Spring
SpringBoot
MySql
HBase
Cassandra
容器化
Docker
Kubernetes
服务容器化从零开始
未分类笔记
算法相关
概念相关
豆知识
机器学习
机器学习从零开始
伪集群环境搭建Hello World
10
2019-02-18 16:46:46
容器化
服务容器化从零开始
## 环境说明 单机环境部署,ip为**192.168.248.128**。 不建议模仿,Master机上最好不要部署客户端节点。 由于是单机环境,多机部署集群会遇到的问题这里可能没有暴露。 - 操作系统:运行在VMware Workstation虚拟机上的CentOs 7 64位系统 Docker引擎在Win10上支持很好,但我的机器是Win7系统,因此使用虚拟机 ## 构建工具说明 目标是完成持续集成自动化构建。 构建过程参考了网上提供的基于k8s的devops整体解决方案: ![](/img/pic/2019021815124600608_png_673_538_79999) 本文使用类似的构建流程和工具: 1. 代码提交到GitHub进行版本控制 2. Jenkins从GitHub拉取代码 3. Jenkins调用Maven进行构建、打包 4. Jenkins调用Docker构建镜像 5. Jenkins将镜像推到DockerHub 6. Jenkins调用Kubectl创建Pod进行服务部署 7. k8s在创建时从DockerHub拉取镜像,创建并运行Docker容器 综上,需要准备的内容包括: - Jenkins及其依赖: Java、Jenkins、Git、Maven - 相关的仓库或账号: GitHub账号(或私有仓库)、DockerHub账号(或私有仓库)、Maven配置(可选的私有仓库) - k8s及其依赖: Etcd、Flannel、Kube-apiserver、Kube-controller-manager、Kube-scheduler、Kubelet、Kube-proxy - Docker 除k8s及Docker外的准备工作已介绍过,下边介绍k8s和Docker的环境搭建 ## 环境搭建 ### 组件说明 **etcd** 一个高可用的分布式键值存储系统,主要用于共享配置和服务发现。 根据部分网文简介,灵感来源于ZooKeeper和Doozer,主要特性是可自动推举Leader,避免了类似系统的集群中部分Leader节点故障或网络故障导致的集群整体不可用,使得集群可用性提高,拥有一定的容错能力。 **flannel** 一个虚拟覆盖网络工具,目的是使得集群中的每个容器都“误认为”自身与其他节点处于同一内网IP段内,并具有全集群唯一的虚拟IP地址。 **kube-apiserver** k8s集群控制唯一入口,可通过kubectl命令调用或通过UI调用,见k8s基本概念介绍。 **kube-controller-manager、kube-scheduler、kubelet、kube-proxy** 见k8s基本概念介绍。 ### 搭建流程 **每台机器的准备工作** - 关闭防火墙进程 ```shell systemctl stop firewalld systemctl disable firewalld ``` - 关闭selinux ```shell # SELINUX=disabled # 查看SELinux状态: /usr/sbin/sestatus -v # 如果SELinux status参数为enabled即为开启状态 getenforce # 也可以用这个命令检查 # 关闭SELinux: # 1.临时关闭不重启机器: setenforce 0 # 设置SELinux 成为permissive模式 # setenforce 1 设置SELinux 成为enforcing模式 # 2.修改配置文件需要重启机器: vim /etc/selinux/config # 或 vim /etc/sysconfig/selinux # 将SELINUX=enforcing改为SELINUX=disabled # 重启机器即可 ``` **Master节点** ```shell # 安装etcd yum -y install etcd # 安装k8s yum -y install kubernetes # 配置etcd vim /etc/etcd/etcd.conf # 内容如下: ETCD_NAME=default ETCD_DATA_DIR="/var/lib/etcd/default.etcd" # 数据存放目录 ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" # 监听端口 ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379" # 广告端口? # 配置k8s的apiserver vim /etc/kubernetes/apiserver # 内容如下 KUBE_API_ADDRESS="--address=0.0.0.0" # apiserver addr KUBE_API_PORT="--port=8080" # apiserver port KUBELET_PORT="--kubelet_port=10250" # kubelet端口,这个是开放给客户端kubelet用的 KUBE_ETCD_SERVERS="--etcd_servers=http://127.0.0.1:2379" # etcd服务ip端口 KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" KUBE_API_ARGS="--service_account_key_file=/path/to/serviceaccount.key" # 这里要用自己的accountKey文件 # 可以通过"openssl genrsa -out /path/to/serviceaccount.key 2048"生成accountKey # 配置controller-manager vim /etc/kubernetes/controller-manager # 内容如下 KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/path/to/serviceaccount.key" # 这里要用自己的accountKey文件 # 启动 etcd、kube-apiserver、kube-controller-manager、kube-scheduler systemctl restart {xx} # 启动 systemctl enable {xx} # 启用 systemctl status {xx} # 检查状态,一般有标绿 running;如果有错,可使用journalctl命令排障 # 在etcd中配置flannel子网 # etcd命令类似zk # --endpoints参数:逗号分隔的地址,语法 --endpoints addr1[,addr2...] # 默认addr为"http://127.0.0.1:2379,http://127.0.0.1:4001",应该使用自己的{ip:port} etcdctl --endpoints "http://192.168.248.128:2379" set /atomic.io/network/config '{"Network":"10.0.0.0/16"}' # 使用kubectl查看nodes状态 # 应该是空的 kubectl get nodes ``` **Node节点** ```shell # 安装flannel yum -y install flannel # 安装k8s yum -y install kubernetes # 配置k8s客户端,不清楚具体是哪个组件,应该是kube-proxy? vim /etc/kubernetes/config KUBE_MASTER="--master=http://192.168.248.128:8080" # apiserver的地址 KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.248.128:2379" # etcd的服务地址 # 配置kubelet vim /etc/kubernetes/kubelet KUBELET_ADDRESS="--address=0.0.0.0" #kubelet监听地址 KUBELET_PORT="--port=10250" # kubelet监听端口 KUBELET_HOSTNAME="--hostname_override=192.168.248.128" # 使用自己的ip KUBELET_API_SERVER="--api_servers=http://192.168.248.128:8080" # apiserver的服务地址 KUBELET_ARGS="" # 通过网络配置检查是否运行过docker ifconfig docker0 # 如果运行过,需要删除 ip link delete docker0 # 配置flannel vim /etc/sysconfig/flanneld FLANNEL_ETCD_ENDPOINTS="http://192.168.248.128:2379" # etcd的服务地址 FLANNEL_ETCD_PREFIX="/atomic.io/network" # 这个目录是配置在etcd中的 # docker配置有可能出现缺失,检查一下 ll /etc/docker/certs.d/registry.access.redhat.com/ # 该目录应该有一个文件redhat-ca.crt,该文件软链到/etc/rhsm/ca/redhat-uep.pem # 如果redhat-uep.pem出现缺失,创建这个文件,内容从以下GitHub地址二选一复制: # https://github.com/candlepin/subscription-manager/blob/master/etc-conf/redhat-uep.pem # https://github.com/candlepin/python-rhsm/blob/master/etc-conf/ca/redhat-uep.pem vim /etc/rhsm/ca/redhat-uep.pem # 启动 flanneld(后台运行flannel)、kube-proxy、kubelet docker systemctl restart {xx} # 启动 systemctl enable {xx} # 启用 systemctl status {xx} # 检查状态,一般有标绿 running;如果有错,可使用journalctl命令排障 # 再回到Master机检查nodes状态是否Ready # 遇到异常可使用kubectl describe node {nodename}排障 kubectl get nodes ``` ## 总结 通过环境搭建流程可知: 1. k8s依赖类似flannel的虚拟子网 2. flannel依赖类似etcd的可靠kv存储,官方实践使用的是etcd 3. etcd可与集群分离提高可靠性 4. Master节点运行k8s的kube-apiserver、kube-controller-manager、kube-scheduler组件 5. Node节点运行flannel及k8s的kube-proxy、kubelet docker组件 6. Node节点kubelet会与apiserver通信 ## 参考资料 [基于kubernetes构建Docker集群环境实战](https://www.cnblogs.com/xhyan/p/6655731.html)
发布文章 101
文章被阅读 1817
最近修改
什么是“丝滑”的曲线
2021-12-08 15:19:20
高效空间数据索引R树及其批量加载方法STR简介
2021-09-29 20:33:37
关于分库分表的一些事儿
2021-06-25 11:51:25
获得诺奖的稳定匹配理论之TTC算法与GS算法
2021-03-14 23:04:48
算法小白的机器学习入门实践,从零到上线
2021-01-13 14:28:27
分站宗旨
一站式资料平台,减少重复检索,减少重复采坑。