【云原生】2.2 kubeadm创建集群

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)2 CPU 核或更多集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)............

  哈喽~大家好呀,欢迎大家来到 Kubernetes 篇(k8s篇)文章系列的第二篇——kubeadm创建集群,我们来一起看看吧。


一、前言

🎡我们有三台机器(node1节点,node2节点,node3节点)

image.png

所以我们的第一步就是把三台机器全部装好 docker(这里可以参照之前的文章),这里建议批量输入进行操作。

image.png

二、安装kubeadm

🍿安装要求:

    • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令
    • 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)
    • 2 CPU 核或更多
    • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
        • 设置防火墙放行规则
            • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
                • 设置不同hostname
                    • 开启机器上的某些端口。请参见这里 了解更多详细信息。
                        • 内网互信
                            • 禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区。
                                • 永久关闭

                                  2.1 安装基础环境

                                  🎀第一步我们要设置各个机器自己的域名

                                  hostnamectl set-hostname xxxx

                                  image.gif

                                  🎀第二步将 SELinux 设置为 permissive 模式(相当于将其禁用)

                                  sudo setenforce 0
                                  sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

                                  image.gif

                                  🎀第三步关闭swap

                                  swapoff -a  
                                  sed -ri 's/.*swap.*/#&/' /etc/fstab

                                  image.gif

                                  🎀第四步允许 iptables 检查桥接流量

                                  cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
                                  br_netfilter
                                  EOF
                                  cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
                                  net.bridge.bridge-nf-call-ip6tables = 1
                                  net.bridge.bridge-nf-call-iptables = 1
                                  EOF

                                  image.gif

                                  🎀第五步我们让以上的配置生效

                                  sudo sysctl --system

                                  image.gif

                                  2.2 安装kubelet、kubeadm、kubectl

                                  🎡 我们这里需要安装三大这个组件。

                                  cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
                                  [kubernetes]
                                  name=Kubernetes
                                  baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
                                  enabled=1
                                  gpgcheck=0
                                  repo_gpgcheck=0
                                  gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
                                     http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
                                  exclude=kubelet kubeadm kubectl
                                  EOF

                                  image.gif

                                  image.png

                                  🎡输入命令,让它自己慢慢下

                                  sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

                                  image.gif

                                  image.png

                                  我们让所有的机器启动 kubelet

                                  sudo systemctl enable --now kubelet

                                  image.gif

                                  三、使用kubeadm引导集群

                                  3.1 下载各个机器需要的镜像

                                  sudo tee ./images.sh <<-'EOF'
                                  #!/bin/bash
                                  images=(
                                  kube-apiserver:v1.20.9
                                  kube-proxy:v1.20.9
                                  kube-controller-manager:v1.20.9
                                  kube-scheduler:v1.20.9
                                  coredns:1.7.0
                                  etcd:3.4.13-0
                                  pause:3.2
                                  )
                                  for imageName in ${images[@]} ; do
                                  docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
                                  done
                                  EOF

                                  image.gif

                                  image.png

                                  给脚本加个权限

                                  chmod +x ./images.sh && ./images.sh

                                  image.gif

                                  🎡接下来的一步很关键,我们要设置主节点

                                  注:所有机器添加master域名映射,以下需要修改为自己的

                                  echo "172.31.0.4  cluster-endpoint" >> /etc/hosts

                                  image.gif

                                  🎡接下来主节点初始化(--apiserver-advertise-address= + 主机号)

                                  kubeadm init \
                                  --apiserver-advertise-address=172.31.0.4 \
                                  --control-plane-endpoint=cluster-endpoint \
                                  --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
                                  --kubernetes-version v1.20.9 \
                                  --service-cidr=10.96.0.0/16 \
                                  --pod-network-cidr=192.168.0.0/16

                                  image.gif

                                  🎡如果你看到这个那么恭喜你,安装成功了

                                  image.png

                                  3.2 安装网络组件

                                  curl https://docs.projectcalico.org/manifests/calico.yaml -O
                                  kubectl apply -f calico.yaml

                                  image.gif

                                  image.png

                                  3.3 加入node节点

                                  kubeadm join cluster-endpoint:6443 --token x5g4uy.wpjjdbgra92s25pp \
                                    --discovery-token-ca-cert-hash sha256:6255797916eaee52bf9dda9429db616fcd828436708345a308f4b917d3457a22

                                  image.gif

                                  3.4 验证集群

                                    • 验证集群节点状态
                                      • kubectl get nodes

                                      3.5 部署dashboard

                                      🎡到这里我们一直用的是命令行,感觉很枯燥无味,这里我们来一个可视化界面——dashboard。

                                      kubectl apply -f 
                                      https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

                                      image.gif

                                      如果命令没有用,我们就直接将https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

                                      复制到浏览器的地址栏中,直接复制代码,粘贴

                                      image.png

                                      image.png

                                      注:将 type: ClusterIP 改为 type: NodePort

                                      设置访问端口

                                      kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

                                      image.gif

                                      🎡 找到端口,在安全组放行

                                      kubectl get svc -A |grep kubernetes-dashboard

                                      image.gif

                                      🎡这是我们可以看到我们的安全端口

                                      image.png

                                      在浏览器输入https://139.198.165.238:32759就能访问登入界面了

                                      格式:https://集群任意IP:端口

                                      image.png

                                      🎡这是我们需要令牌,准备一个文件——vi dash.yaml,输入指令,然后在应用一下

                                      apiVersion: v1
                                      kind: ServiceAccount
                                      metadata:
                                        name: admin-user
                                        namespace: kubernetes-dashboard
                                      ---
                                      apiVersion: rbac.authorization.k8s.io/v1
                                      kind: ClusterRoleBinding
                                      metadata:
                                        name: admin-user
                                      roleRef:
                                        apiGroup: rbac.authorization.k8s.io
                                        kind: ClusterRole
                                        name: cluster-admin
                                      subjects:
                                      - kind: ServiceAccount
                                        name: admin-user
                                        namespace: kubernetes-dashboard

                                      image.gif

                                      kubectl apply -f dash.yaml

                                      image.gif

                                      令牌访问

                                      #获取访问令牌
                                      kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

                                      image.gif

                                      image.png

                                      🎡 复制选中的部分,这就是我们的密钥。

                                      然后在 Kubeconfig 里面输入密钥,我们就可以访问了。

                                      image.png

                                       

                                      相关实践学习
                                      通过Ingress进行灰度发布
                                      本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
                                      容器应用与集群管理
                                      欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
                                      相关文章
                                      |
                                      1月前
                                      |
                                      Kubernetes Cloud Native 云计算
                                      云原生之旅:Kubernetes 集群的搭建与实践
                                      【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
                                      120 17
                                      |
                                      1月前
                                      |
                                      Kubernetes Cloud Native Ubuntu
                                      云原生之旅:Kubernetes集群搭建与应用部署
                                      【8月更文挑战第65天】本文将带你进入云原生的世界,通过一步步指导如何在本地环境中搭建Kubernetes集群,并部署一个简单的应用。我们将使用Minikube和Docker作为工具,探索云原生技术的魅力所在。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实践技巧。
                                      |
                                      1月前
                                      |
                                      Kubernetes Cloud Native 流计算
                                      Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
                                      Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
                                      73 0
                                      |
                                      2月前
                                      |
                                      Kubernetes 监控 Cloud Native
                                      Cluster Optimizer:一款云原生集群优化平台
                                      **Cluster Optimizer** 是一款云原生集群优化平台,旨在通过自动化和智能化工具帮助企业降低云成本,解决云原生架构中的成本管理难题。面对资源闲置、配置不当和缺乏自动化优化机制等挑战,Cluster Optimizer能够深入分析云资源、应用和用户行为,精准识别优化机会,并给出具体建议,涵盖节点组、节点、GPU 节点、磁盘、持久卷和应用等多个维度。通过优化实例类型、自动扩缩容和资源分配,帮助企业降低成本、提升性能和效率。[点击此处](https://www.wiseinf.com.cn/docs/setup/) 免费安装和试用 **Cluster Optimizer 社区版**。
                                      96 9
                                      |
                                      3月前
                                      |
                                      运维 Kubernetes Cloud Native
                                      云原生之旅:Kubernetes 集群的搭建与实践Python 编程入门:从零基础到编写实用脚本
                                      【8月更文挑战第30天】在数字化转型的大潮中,云原生技术以其弹性、可扩展性及高效运维能力成为企业IT架构升级的关键。本文将通过实际操作演示如何在本地环境搭建一个简易的Kubernetes集群,带你领略云原生的魅力所在。从集群规划到服务部署,每一步都是对云原生理念的深刻理解和应用。让我们共同探索,如何通过Kubernetes集群的搭建和运维,提升业务灵活性和创新能力。
                                      |
                                      3月前
                                      |
                                      Kubernetes Cloud Native 应用服务中间件
                                      云原生之旅:Kubernetes集群搭建与应用部署
                                      【8月更文挑战第28天】在数字化浪潮中,云原生技术正成为企业IT架构转型的重要驱动力。本文将通过实践案例,引导读者理解云原生的核心概念,掌握Kubernetes集群的搭建方法,并学会如何部署和管理容器化应用。文章不仅提供详细的操作步骤和示例代码,还深入探讨了云原生技术背后的哲学及其对企业数字化转型的影响,旨在帮助读者构建起对云原生世界的全面认识,并激发对技术创新和应用实践的思考。
                                      |
                                      3月前
                                      |
                                      运维 Kubernetes Cloud Native
                                      探索云原生:Kubernetes集群的部署与管理
                                      【8月更文挑战第31天】 本文将带领读者深入了解云原生技术,特别是以Kubernetes为核心的集群部署和管理。文章不仅介绍了Kubernetes的基础概念和架构,还通过实际的代码示例展示了如何在云平台上搭建一个Kubernetes集群。我们将从基础的安装步骤到高级的服务部署,一步步揭示如何利用Kubernetes来简化容器化应用的管理与扩展。无论你是云原生新手还是希望提升现有技能的开发者,这篇文章都将成为你实践云原生技术的宝贵指南。
                                      |
                                      3月前
                                      |
                                      Kubernetes Cloud Native 应用服务中间件
                                      云原生之旅:构建你的首个Kubernetes集群
                                      【8月更文挑战第31天】在这个数字化迅速演进的时代,云原生技术如同星辰般璀璨。它不仅是企业数字化转型的引擎,更是开发者们探索创新的乐园。本文将带你开启一场云原生的奇妙旅程,从零开始,一步步构建属于你自己的Kubernetes集群。想象一下,当你的应用在云端自如地伸缩、滚动更新时,那份成就感和掌控感,是不是已经让你跃跃欲试了呢?那就让我们开始吧!
                                      |
                                      3月前
                                      |
                                      Kubernetes Cloud Native JavaScript
                                      云原生之旅:Kubernetes 集群搭建与应用部署实践
                                      【8月更文挑战第31天】云原生技术正在改变软件开发和运维的方式,而Kubernetes作为其核心组件之一,提供了一个强大的平台来编排容器化的应用。本文将引导你了解如何搭建一个基本的Kubernetes集群,并通过一个简单的Node.js应用示例,展示如何在集群中部署和管理应用。我们将从零开始,逐步构建起对Kubernetes的直观理解,并在实践中学习其核心概念。
                                      |
                                      4月前
                                      |
                                      Cloud Native 关系型数据库 MySQL
                                      云原生数据仓库使用问题之集群支持的数值函数有哪些
                                      阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。