10分钟搭建Kubernetes容器集群平台(kubeadm) 精选 原创 李振良_阿良 2018-10-09 09:14:20 博主文章分类:Docker & K8S ©著作权 文章标签 kubernetes k8s docker 文章分类 虚拟化 云计算 ©著作权归作者所有:来自51CTO博客作者李振良_阿良的原创作品,请联系作者获取转载授权,否则将追究法律责任 官方提供Kubernetes部署3种方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。 官方文档:https://kubernetes.io/docs/setup/minikube/ kubeadm kubeadm可帮助你快速部署一套kubernetes集群。kubeadm设计目的为新用户开始尝试kubernetes提供一种简单的方法。目前是Beta版。 官方文档:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/ https://kubernetes.io/docs/setup/independent/install-kubeadm/ 二进制包 从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。目前企业生产环境中主要使用该方式。 下载地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md#v1113 1. 安装要求 操作系统 Ubuntu 16.04+ Debian 9 CentOS 7 RHEL 7 Fedora 25/26 (best-effort) 其他 内存2GB + ,2核CPU + 集群节点之间可以通信 每个节点唯一主机名,MAC地址和product_uuid 检查MAC地址:使用ip link或者ifconfig -a 检查product_uuid:cat /sys/class/dmi/id/product_uuid 禁止swap分区。这样才能使kubelet正常工作 2. 准备环境 关闭防火墙: # systemctl stop firewalld # systemctl disable firewalld 关闭selinux: # sed -i 's/enforcing/disabled/' /etc/selinux/config # setenforce 0 关闭swap: # swapoff -a # 临时 # vim /etc/fstab # 永久 添加主机名与IP对应关系: # cat /etc/hosts 192.168.0.11 k8s-master 192.168.0.12 k8s-node1 192.168.0.13 k8s-node2 同步时间: # yum install ntpdate -y # ntpdate ntp.api.bz 3. 安装Docker Docker与Kubernetes关系图: # yum install -y yum-utils device-mapper-persistent-data lvm2 # yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # yum install docker-ce-17.03.3.ce -y #目前kubeadm最大支持docker-ce-17.03,所以要指定该版本安装 # systemctl enable docker && systemctl start docker 如果提示container-selinux依赖问题,先安装ce-17.03匹配版本: # yum localinstall https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm 4. 安装kubeadm,kubelet和kubectl kubeadm: 引导集群的命令 kubelet:集群中运行任务的代理程序 kubectl:命令行管理工具 4.1 添加阿里云YUM软件源 # cat << EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF 4.2 安装kubeadm,kubelet和kubectl # yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # systemctl enable kubelet && systemctl start kubelet 注意:使用Docker时,kubeadm会自动检查kubelet的cgroup驱动程序,并/var/lib/kubelet/kubeadm-flags.env在运行时将其设置在文件中。如果使用的其他CRI,则必须在/etc/default/kubelet中cgroup-driver值修改为cgroupfs: # cat /var/lib/kubelet/kubeadm-flags.env KUBELET_KUBEADM_ARGS=--cgroup-driver=cgroupfs --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --network-plugin=cni # systemctl daemon-reload # systemctl restart kubelet 5. 使用kubeadm创建单个Master集群 5.1 默认下载镜像地址在国外无法访问,先从准备好所需镜像 保存到脚本之间运行: K8S_VERSION=v1.11.2 ETCD_VERSION=3.2.18 DASHBOARD_VERSION=v1.8.3 FLANNEL_VERSION=v0.10.0-amd64 DNS_VERSION=1.1.3 PAUSE_VERSION=3.1 # 基本组件 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:$K8S_VERSION docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:$K8S_VERSION docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:$K8S_VERSION docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:$K8S_VERSION docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:$ETCD_VERSION docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION # 网络组件 docker pull quay.io/coreos/flannel:$FLANNEL_VERSION # 修改tag docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:$K8S_VERSION k8s.gcr.io/kube-apiserver-amd64:$K8S_VERSION docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:$K8S_VERSION k8s.gcr.io/kube-controller-manager-amd64:$K8S_VERSION docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:$K8S_VERSION k8s.gcr.io/kube-scheduler-amd64:$K8S_VERSION docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:$K8S_VERSION k8s.gcr.io/kube-proxy-amd64:$K8S_VERSION docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:$ETCD_VERSION k8s.gcr.io/etcd-amd64:$ETCD_VERSION docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION k8s.gcr.io/coredns:$DNS_VERSION 5.2 初始化Master # kubeadm init --kubernetes-version=1.11.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.0.11 ... Your Kubernetes master has initialized successfully! To start using your cluster, you need to run (as a regular user): mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the addon options listed at: http://kubernetes.io/docs/admin/addons/ You can now join any number of machines by running the following on each node as root: kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash> mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 5.3 安装Pod网络 - 插件 # kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml 5.4 加入工作节点 在Node节点切换到root账号执行: # kubeadm join 192.168.0.11:6443 --token 6hk68y.0rdz1wdjyh85ntkr --discovery-token-ca-cert-hash sha256:d1d3f59ae37fbd632707cbeb9b095d0d0b19af535078091993c4bc4d9d2a7782 格式:kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash> 6. kubernetes dashboard 先将yaml文件下载下来,修改里面镜像地址和Service NodePort类型。 # wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml 修改镜像地址: # registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.0 修改Service: kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 30001 selector: k8s-app: kubernetes-dashboard # kubectl apply -f kubernetes-dashboard.yaml 创建一个管理员角色: apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: dashboard-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kube-system roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io # kubectl apply -f k8s-admin.yaml 使用上述创建账号的token登录Kubernetes Dashboard: # kubectl get secret -n kube-system # kubectl describe secret dashboard-admin-token-bwdjj -n kube-system ... token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tYndkamoiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNzIyOTRmNTUtYjc1OC0xMWU4LThkY2UtMDAwYzI5ZGUyNWVhIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.0hQU5Di_P1OX1DcnW2AYzjDAED66EOrqhF5iupv39wvB8wE-aLRSQyp0twX2M8u1KMZ67n6LxbH17VwEQkMDRVXs7ZlUCyAAD6kHDz3k-f7PAzH5vcuyO4veQ9ooVjk3DKjrP4zXQChHllBB1wmD_oyLjoWxK3Z5MBTlVGzSixVwuQNpFPbuS6Z7iLGwUOgjI0cGZ9Tt6cXzcK81KfAEpDIP_CtFV_Jw4s98EgBex9mZh6vq1dcxr03qfuK--udd_8GWZctu_p_P15hZZLoKEm5GCbs6JGvKL2aao_DEHfLp3XYEnApojI91vU4qAqdkvMZ2qWQNGYv4KNi2yPOOJQ 技术彩蛋 在2018/2019年Docker/Kubernetes容器技术无疑是业内最火的技术。根据招聘简介情况来看,容器技术已成为运维工程师、架构师必备技能。 为帮助大家快速掌握这门主流技术,少走弯路,提高核心竞争力。决定写《基于Kubernetes企业容器云平台落地与实践》文章专栏,给朋友在企业落地容器云平台提供一些企业实践性指导,希望自己所学所思的东西能够帮助到大家,能够有所启发。 传送门:基于Kubernetes企业容器云平台落地与实践 若你在容器运维中,遇到容器方面的问题,可以给我微信↓。同样,若发现文章有任何纰漏,还请随时指正,相互学习,共同进步! 赞 收藏 评论 分享 举报 上一篇:Docker(一):认识Docker 下一篇:Kubernetes v1.12/v1.13 二进制部署集群(HTTPS+RBAC) 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 在容器云平台部署服务网格 服务网格是什么?服务网格(service mesh)是一个微服务网络,它用于在一个分布式的微服务架构中构成应用程序,并提供不同微服务间的交互功能。当服务网格的规模和复杂性增大时,了解和管理它就会变得非常困难。Openshift Servicemesh Operator 基于开源 Istio 项目,用于简化 Istio 的部署和管理并为创建部署的服务提供发现、负载均衡、服务对服务身份验证、故障恢复、 微服务 servicemesh openshift 【Docker项目实战】使用Docker部署Raneto知识库平台 【Docker项目实战】使用Docker部署Raneto知识库平台 docker Docker Markdown Docker搭建持续集成平台Jenkins最简教程 前言持续集成(Continuous Integration,CI)是软件开发中的一种实践,它旨在通过频繁地集成代码变更并自动运行测试,以确保代码的质量和稳定性。Jenkins 是一个广泛使用的开源持续集成工具,它能够自动化构建、测试和部署软件项目。在本文中,我们将使用 Docker 搭建一个基于 Jenkins 的持续集成平台。环境准备首先我们需要再Linux环境中安装好docker,具体步骤可以 docker Jenkins 持续集成 docker 容器部署平台 # 如何实现“docker容器部署平台”## 一、整体流程```mermaidgraph TD A(准备工作) --> B(创建Docker镜像) B --> C(上传镜像到Docker Hub) C --> D(部署Docker容器) D --> E(测试容器是否正常运行)```## 二、详细步骤及代码示例### 步骤一:准备工作在开始之前 Docker 上传 docker docker容器搭建mysql集群 ## Docker容器搭建MySQL集群### 1. 流程概述在搭建MySQL集群之前,我们首先需要了解一些基本概念和流程。MySQL集群是基于Docker容器的,所以我们需要先安装Docker,并创建多个容器来构建集群。下面是整个流程的概述:1. 安装Docker2. 创建多个容器3. 配置集群4. 启动集群5. 验证集群6. 数据同步和复制下面我们将逐一讲解每个步骤的 mysql MySQL Docker docker容器搭建kafka集群 生产环境上的kafka服务发生多次挂掉的情况,所以搭建一个想对于稳定的kafka集群,利用docker容器,实际上也可以说是多节点 kafka 集群 Docker - 容器部署 Consul 集群 简介image_1d78seg768pbqmr1le6on71p0h19.png-172.3kB了解 ConsulConsul 是一个支持多数据中心分布式高可用 Server docker 数据中心 快速搭建Kubernetes容器集群平台(kubeadm) kubeadm简介kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点kubeadm init将一个 Node 节点加入到当前集群中kubeadm join <Master节点的IP和端口 >1. 安装要求在开始之前,部署Kubernetes集 快速搭建k8s集群平台 docker 部署kafka集群 docker搭建集群 基于docker的集群搭建2.3.2.1 环境准备 1.搭建docker 要想在docker上搭建solr集群,首先安装docker的环境。这个就不再演示,如果没有学过docker的同学可以参考下面的视频地址进行学习。 https://www.boxuegu.com/freecourse/detail-1553.html 如果学习过但是忘了如何搭建,参考一下地址。 https://www.runo docker 部署kafka集群 docker 容器 运维 solr docker容器部署流程 容器docker搭建 1 . 对docker的理解:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。一个完整的Docker有以下几个部分组成:DockerClient客户端DockerClient客户端Docker Image镜像DockerCon docker容器部署流程 docker简介与搭建 docker Docker 应用程序 管理平台容器化部署 容器管理集群 Kubernetes概述Kubernetes 是 Google开源的容器集群管理系统,基于 Docker构建一个容器的调度服务,提供资源调度、均衡容器、服务注册、动态扩缩容等功能套件。 基于容器的云平台 1 Kubernetes和相关组件的介绍 1、master: kubernetes管理结点 2、apiserver :3、scheduler kubernetes 管理平台容器化部署 ks8搭建教程 基础教程 3台主机搭建k8s 超详细教程 docker 搭建mysql 集群 docker部署mysql集群 1、安装docker安装yum-utils:yum install -y yum-utils device-mapper-persistent-data lvm2为yum源添加docker仓库位置:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装docker:yum ins docker 搭建mysql 集群 docker mysql centos vim docker mysql 集群搭建 docker部署mysql集群 目录一、环境:二、docker的安装1、把yum包更新到最新2、安装需要的软件包;3、设置yum源4、查看版本5、安装Docker;6、启动Docker;7、查看安装版本8、常用Docker命令三、基于docker搭建pxc模式的mysql集群1、拉取镜像2、重命名镜像;3、设置防火墙4、确认集群服务器;5、创建容器四、配置haproxy1、创建haproxy用户2、构建haproxy容器五、后续 docker mysql 集群搭建 docker linux mysql 服务器 docker nacos集群部署 docker nacos集群搭建 一、Nacos上篇文章中,我们介绍了使用直接部署的方式在CenterOS 中安装今天我们介绍下使用docker 的方式搭建nacos集群,主要采用docker-compose的方式进行搭建。下面就开始吧!二、docker-compose 搭建Nacos集群在搭建之前确保环境中已经安装好了docker 和 docker-compose。搭建架构:主机角色192.168.40.130mysql,nac docker nacos集群部署 微服务 nacos nginx docker docker 部署集群redis docker redis集群搭建 基于Docker搭建Redis集群1 创建文件夹 以及进入文件夹2 创建Redis镜像添加内容3 下载Redis.gz包,`注意:到此步骤才需要Redis的安装包`,上面的操作不需要4 创建打开ruby镜像添加内容4 启动Redis节点5 查看Redos节点IP地址6 启动并打开ruby容器7 ruby容器内输入8 到此Redis集群已经配置成功了!!! 最近项目需要Redis集群在这里插入代码 docker 部署集群redis docker linux java redis docker部署spark集群 docker搭建spark集群 1.镜像制作方案我们要使用Docker来搭建hadoop,spark,hive及mysql集群,首先使用Dockerfile制作镜像,把相关的软件拷贝到约定好的目录下,把配置文件在外面先配置好,再使用docker and / docker run,拷贝移动到hadoop,spark,hive的配置目录。需要注意一点在spark中读取hive中的数据,需要把配置文件hive-site.xml拷贝到s docker部署spark集群 spark docker hadoop xml docker kafka 集群搭建 kafka容器集群 Docker软件版本 本次实战的电脑操作系统是Win10专业版,安装的Docker版本信息如下: ssh工具 为了登录容器方便,建议使用SecureCRT;环境规划使用同一个镜像,容器们的功能如下: 1. kafka集群:三个broker,分别是borker1、broker2、broker3; 2. 消息生产者:一个; 3. 消息消费者:两个; 容器 docker kafka 集群搭建 kafka zookeeper docker docker 容器托管 搭建 容器docker的管理平台 2019年,我们预测在企业应用程序开发方面,将会出现一个重大转折,应用运行环境将从传统的虚拟机(VM)转向容器和Kubernetes容器编排。确切的讲,我们预测包括如下几点: 未来将是多云并存的时代。Docker容器与Kubernetes共存。公共云对外提供API服务接口,从调用结构看,好比是以前私有大型机的新表现形式。VMware虚拟机的“提升和转变”的上云迁移方式,所带来的花费将会比客户预期 docker 容器托管 搭建 AWS VMware Java docker eureka集群部署 eureka集群搭建 1.依赖,创建springboot项目是添加eureka-server即可 2.yaml 文件:server: port: 7070# 这个在多个注册中心里命名是一样的spring: application: name: my-eureka-server# 测试不配置的话,现象为在注册中心显示端口+ip,但是配置后,eureka.clientserverUrl.defau docker eureka集群部署 spring 后缀 待解决 etcd集群部署docker 搭建etcd集群 一、etcd介绍:ETCD 是一个高可用的分布式键值数据库,可用于服务发现。ETCD 采用 raft 一致性算法,基于 Go 语言实现。etcd作为一个高可用键值存储系统,天生就是为集群化而设计的。由于Raft算法在做决策时需要多数节点的投票,所以etcd一般部署集群推荐奇数个节点,推荐的数量为3、5或者7个节点构成一个集群。二、特点:实际上,etcd作为一个受到Zookeeper与doozer启 etcd集群部署docker d3 数据 API