部署 Kubernetes 容器集群管理系统

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Kubernetes 是 Google 开源的容器集群管理系统,基于 Docker 构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。基于容器的云平台。官网:https://kubernetes.io/

部署 Kubernetes 容器集群管理系统



一、 Kubernetes 和相关组件介绍


    1.Kubernetes 概述

    2.Kubernetes 架构设计图

    3.Kubernetes 常见组件介绍


二、 部署 Kubernetes 容器集群管理系统


    1.配置 Kubernetes 的 yum 源

    2.配置 Hosts 文件

    3.在各个节点上面安装 K8s 组件

    4.部署 ETCD 服务器

      1)配置 ETCD 主配置文件

      2)配置 ETCD 网络

      3)Flannel 启动过程解析

      4)配置 Flannel 服务

      5)查看子网信息

    5.部署 master 服务器

      1)配置 Kubernetes 主配置文件

      2)配置 APIServer 配置文件

      3)配置 Kube-Scheduler 配置文件

      5)配置 Flannel 服务

      6)启用 master 上 4 个服务

    6.部署 node1,node2 节点服务器

      1)配置 Flannel 服务

      2)配置 master 地址

      3)配置 Kubelet

      4)启用服务

      5)查看 Kube-Proxy 端口号

    7.在 master 上查看整个集群的运行状态


一、 Kubernetes 和相关组件介绍



1.Kubernetes 概述


Kubernetes 是 Google 开源的容器集群管理系统,基于 Docker 构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。基于容器的云平台。官网:https://kubernetes.io/


2.Kubernetes 架构设计图


Kubernetes 是由一个 Master 和多个 Node 组成,Master 通过 API 提供服务,并接收 Kubectl 发送过来的请求来调度管理整个集群。


image.png


3.Kubernetes 常见组件介绍


  • APIServer:所有服务的统一访问入口。
  • Controller Manager(控制器):主要就是用来维持 Pod 的一个副本数。
  • Scheduler(调度器):主要就是用来分配任务到合适的节点。
  • ETCD:键值对数据库,存放了 K8s 集群中所有重要信息(持久化)
  • Kubelet:直接和容器引擎交互,用来维护容器的一个声明周期。
  • Kube-Proxy:用于将规则写入 iptables 或 IPVS 来实现服务的映射访问。
  • Kubectl:是 K8s 平台的管理命令。


二、 部署 Kubernetes 容器集群管理系统



准备工作:


image.png


image.pngimage.png


1.配置 Kubernetes 的 yum 源


把 k8s-package.tar.gz 上传到 master 机器中:


[root@master ~]# ls
anaconda-ks.cfg  k8s-package.tar.gz
[root@master ~]# tar zxf k8s-package.tar.gz 
[root@master ~]# ls
anaconda-ks.cfg  k8s-package  k8s-package.tar.gz
[root@master ~]# cat <<END > /etc/yum.repos.d/k8s.repo
[k8s]
name=k8s
baseurl=file:///root/k8s-package
enabled=1
gpgcheck=0
END


image.png


复制 K8s 的 yum 源相关文件到其他三台机器上:


[root@master ~]# scp -r /root/k8s-package 192.168.1.2:/root/
[root@master ~]# scp /etc/yum.repos.d/k8s.repo  192.168.1.2:/etc/yum.repos.d/     


2.配置 Hosts 文件


[root@master ~]# cat <<END >> /etc/hosts
192.168.1.1 master
192.168.1.2 etcd
192.168.1.3 node1
192.168.1.4 node2
END
将 hosts 文件远程复制到其他三台机器中:
[root@master ~]# scp /etc/hosts 192.168.1.2:/etc/


image.png


3.在各个节点上面安装 K8s 组件


master:


[root@master ~]# yum -y install kubernetes flannel ntp


etcd:


[root@etcd ~]# yum -y install etcd flannel ntp


node1,node2:


[root@node1 ~]# yum -y install kubernetes flannel ntp


4.部署 ETCD 服务器


1)配置 ETCD 主配置文件


[root@etcd ~]# vim /etc/etcd/etcd.conf
9 ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.1.2:2379"
20 ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.2:2379"


image.png


[root@etcd ~]# systemctl start etcd               # 启动 ETCD 服务
[root@etcd ~]# systemctl enable etcd              # 配置 ETCD 开启自启
[root@etcd ~]# netstat -anpt | grep 2379            # 查看 ETCD 端口号
[root@etcd ~]# etcdctl member list                # 检查 ETCD 集群成员列表. 这里只有一台


image.png


2)配置 ETCD 网络


[root@etcd ~]# etcdctl mkdir /k8s/network           # 创建一个目录 /k8s/network 用于存储 flannel 网络信息
[root@etcd ~]# etcdctl set /k8s/network/config '{"Network":"10.255.0.0/16"}'  # 给 /k8s/network/config 赋一个字符串的值
[root@etcd ~]# etcdctl get /k8s/network/config          # 查看


3)Flannel 启动过程解析


  1. 从 ETCD 中获取出 /k8s/network/config 的值;
  2. 划分 subnet 子网,并在 ETCD 中进行注册;
  3. 将子网信息记录到 /run/flannel/subnet.env 中。


4)配置 Flannel 服务


[root@etcd ~]# vim /etc/sysconfig/flanneld
4 FLANNEL_ETCD_ENDPOINTS="http://192.168.1.2:2379"
8 FLANNEL_ETCD_PREFIX="/k8s/network"
11 FLANNEL_OPTIONS="--iface=ens33"


image.png


[root@etcd ~]# systemctl start flanneld
[root@etcd ~]# ifconfig


image.png


5)查看子网信息


[root@etcd ~]# cat /run/flannel/subnet.env


image.png



后面将会有一个脚本将 subnet.dev 转写成一个 docker 的环境变量文件 /run/flannel/docker;


  • docker0 的地址是由 /run/flannel/subnet.env 的 FLANNEL_SUBNET 参数决定的。


[root@etcd ~]# cat /run/flannel/docker


image.png


5.部署 master 服务器


1)配置 Kubernetes 主配置文件


[root@master ~]# vim /etc/kubernetes/config
22 KUBE_MASTER="--master=http://192.168.1.1:8080"


image.png


2)配置 APIServer 配置文件


[root@master ~]# vim /etc/kubernetes/apiserver
8 KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
17 KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.2:2379"
23 KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit"


image.png


3)配置 Kube-Scheduler 配置文件


[root@master ~]# vim /etc/kubernetes/scheduler
7 KUBE_SCHEDULER_ARGS="0.0.0.0"


image.png


4)配置 Flannel 服务


[root@master ~]# vim /etc/sysconfig/flanneld 
4 FLANNEL_ETCD_ENDPOINTS="http://192.168.1.2:2379"
8 FLANNEL_ETCD_PREFIX="/k8s/network"
11 FLANNEL_OPTIONS="--iface=ens33"


image.png


5)启用 master 上 4 个服务


[root@master ~]# systemctl start kube-apiserver kube-controller-manager kube-scheduler flanneld       
[root@master ~]# systemctl enable kube-apiserver kube-controller-manager kube-scheduler flanneld      
[root@master ~]# ifconfig


image.png


6.部署 node1,node2 节点服务器


node1,node2 操作步骤一致:


1)配置 Flannel 服务


[root@node1 ~]# vim /etc/sysconfig/flanneld
4 FLANNEL_ETCD_ENDPOINTS="http://192.168.1.2:2379"
8 FLANNEL_ETCD_PREFIX="/k8s/network"
11 FLANNEL_OPTIONS="--iface=ens33"


image.png


2)配置 master 地址


[root@node1 ~]# vim /etc/kubernetes/config
22 KUBE_MASTER="--master=http://192.168.1.1:8080"


image.png


3)配置 Kubelet


[root@node1 ~]# vim /etc/kubernetes/kubelet
5 KUBELET_ADDRESS="--address=0.0.0.0"
11 KUBELET_HOSTNAME="--hostname-override=node1"             # node2 主机改为 node2
14 KUBELET_API_SERVER="--api-servers=http://192.168.1.1:8080"


image.png


4)启用服务


[root@node1 ~]# systemctl start flanneld kube-proxy kubelet docker 
[root@node1 ~]# systemctl enable flanneld kube-proxy kubelet docker
[root@node1 ~]# ifconfig


image.png


5)查看 Kube-Proxy 端口号


[root@node1 ~]# netstat -antp | grep proxy


image.png


7.在 master 上查看整个集群的运行状态


[root@master ~]# kubectl get nodes


image.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
22天前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
25天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
184 77
|
5天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
11天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
74 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
23天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
9天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
6天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
44 12
|
1天前
|
人工智能 运维 监控
容器服务Kubernetes场景下可观测体系生产级最佳实践
阿里云容器服务团队在2024年继续蝉联Gartner亚洲唯一全球领导者象限,其可观测体系是运维的核心能力之一。该体系涵盖重保运维、大规模集群稳定性、业务异常诊断等场景,特别是在AI和GPU场景下提供了全面的观测解决方案。通过Tracing、Metric和Log等技术,阿里云增强了对容器网络、存储及多集群架构的监控能力,帮助客户实现高效运维和成本优化。未来,结合AI助手,将进一步提升问题定位和解决效率,缩短MTTR,助力构建智能运维体系。
|
11天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
28 2
|
23天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。

相关产品

  • 容器服务Kubernetes版