Kubernetes入门教程 --- 使用kubeadm进行集群安装

news2024/11/29 0:37:40
在这里插入图片描述

Kubernetes入门教程 --- 使用kubeadm和二进制安装

    • 1. Introduction
      • 1.1 架构图
      • 1.2 关键字介绍
      • 1.3 简述
    • 2. 使用Kubeadm Install
      • 2.1 申请三个虚拟环境
      • 2.2 准备安装环境
      • 2.3 配置yum源
      • 2.4 安装Docker
      • 2.5 时间同步
      • 2.6 安装组件
      • 2.7 部署集群
      • 2.8 Master安装网络插卡
    • 3. 查询状态
      • 3.1 查询node节点
      • 3.2 查询pod
      • 3.3 测试集群
      • 3.4 部署Dashboard
      • 3.5 创建用户
    • 4. Version1.18特性
      • 4.1 Debug
      • 4.2 Sidecar
      • 4.3 Volumn
      • 4.4 ConfigMap/Secret
    • 5. Error
    • 6. Awakening


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


1. Introduction

1.1 架构图

  • 架构图
    左面的master架构
    右边是node架构在这里插入图片描述

1.2 关键字介绍

  • 关键字介绍
    kubectl:命令行工具
    Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
    controller:负责维护集群的状态,比如副本期望数量、故障检测、自动扩展、滚动更新等
    api server:所有服务访问的唯一入口,提供认证、授权、访问控制、API 注册和发现等机制
    scheduler:负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上
    etcd:键值对数据库,保存了整个集群的状态,官方将它定义成一个可信赖的分布式键值存储服务
    kubelet:负责维护容器的生命周期,同时也负责 Volume 和网络的管理
    kube-proxy:负责为 Service 提供 cluster 内部的服务发现和负载均衡
    Container runtime:负责镜像管理以及 Pod 和容器的真正运行
    label:标签,用于对pod进行分类,同一类pod会拥有相同的标签
    NameSpace:命名空间,用来隔离pod的运行环境

1.3 简述

  • kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。
    1.创建一个 Master 节点:kubeadm init
    2.将一个 Node 节点加入到当前集群中:ubeadm join <Master节点的IP和端口

2. 使用Kubeadm Install

2.1 申请三个虚拟环境

序号ip节点类型
110.136.217.11master
210.136.217.12mode
310.136.217.13node

2.2 准备安装环境

  • 1.关闭selinux
    vim /etc/selinux/config
    添加 SELIUNX=disabled
    并将其他两行注释掉在这里插入图片描述
  • 永久关闭selinux
    sed -i ‘s/enforcing/disabled/’ /etc/selinux/config
  • 2.临时关闭swap内存
    swapoff -a
  • 3.永久关闭swap内存
    vim /etc/fstab
    swapoff -a
#永久关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
  • 设置host,在master节点
    vim /etc/hosts
    在这里插入图片描述
  • 调整内核参数
    cat > /etc/sysctl.d/kubernetes.conf << EOF
    #开启网桥模式,可将网桥的流量传递给iptables链
    net.bridge.bridge-nf-call-ip6tables=1
    net.bridge.bridge-nf-call-iptables=1
    #关闭ipv6协议
    net.ipv6.conf.all.disable_ipv6=1
    net.ipv4.ip_forward=1
    EOF
    在这里插入图片描述
  • 保存参数
    sysctl --system
    在这里插入图片描述

2.3 配置yum源

  • 配置源文件
    vim /etc/yum.repos.d/kubernetes.repo
    在这里插入图片描述
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kube

2.4 安装Docker

  • 安装wget
    yum install -y wget
  • 配置docker源
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
  • 安装docker
    yum -y install docker-ce-18.06.1.ce-3.el7
  • 开机启动docker
    systemctl enable docker && systemctl start docker
  • 查看docker版本
    docker --version
  • 守护进程重启
    systemctl daemon-reload
    systemctl start docker
  • 避免每次使用docker都要sudo
    sudo usermod -aG docker xxxxx

2.5 时间同步

  • 安装组件
    yum install ntpdate -y
  • 时间同步
    ntpdate http://time.windows.com

2.6 安装组件

  • 安装
    yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
  • 开机启动
    systemctl enable kubelet && systemctl start kubelet
    在这里插入图片描述
  • kubelet命令补全
    echo “source <(kubectl completion bash)” >> ~/.bash_profile
    source ~/.bash_profile

2.7 部署集群

  • 查看需要的镜像
    kubeadm config images list
    在这里插入图片描述
  • 上传 kubeadm-basic.images.tar.gz 压缩包至 /opt 目录
    tar zxvf kubeadm-basic.images.tar.gz
    在这里插入图片描述
  • for循环安装
    for i in $(ls /opt/kubeadm-basic.images/*.tar); do docker load -i $i; done
    在这里插入图片描述
  • 复制镜像都其他节点
    scp -r kubeadm-basic.images root@nodehostname:/opt
    在这里插入图片描述
  • 在其他节点for循环安装
    for i in $(ls /opt/kubeadm-basic.images/*.tar); do docker load -i $i; done
  • 初始化kubeadm(方法一)
    kubeadm config print init-defaults > /opt/kubeadm-config.yaml
    cd opt
    vim kubeadm-config.yaml
vim kubeadm-config.yaml
......
localAPIEndpoint:
advertiseAddress: 192.168.229.90 #指定master节点的IP地址
bindPort: 6443
......
kubernetesVersion: v1.15.1   #指定kubernetes版本号
networking:
dnsDomain: cluster.local
podSubnet: "10.244.0.0/16"   #指定pod网段,10.244.0.0/16用于匹配flannel默认网段
serviceSubnet: 10.96.0.0/16  #指定service网段
scheduler: {}
--- #末尾再添加以下内容
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs  #把默认的service调度方式改为ipvs模式

  • 初始化
    kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
    在这里插入图片描述
  • 证书目录
    ls /etc/kubernetes/pki
    在这里插入图片描述
  • 初始化kubeadm(方法二)
    kubeadm init --apiserver-advertise-address=0.0.0.0 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.15.1 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
  • 参数详解
    1.apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址
    2.apiserver-bind-port:apiserver的监听端口,默认是6443
    3.cert-dir:通讯的ssl证书文件,默认/etc/kubernetes/pki
    4.control-plane-endpoint:控制台平面的共享终端,可以是负载均衡的ip地址或者dns域名,高可用集群时需要添加
    5.image-repository:拉取镜像的镜像仓库,默认是k8s.gcr.io
    6.kubernetes-version:指定kubernetes版本
    7.pod-network-cidr:pod资源的网段,需与pod网络插件的值设置一致。通常,Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16;
    8.service-cidr:service资源的网段
    9.service-dns-domain:service全域名的后缀,默认是cluster.local
  • 修改 kube-proxy 的 configmap,开启 ipvs
    kubectl edit cm kube-proxy -n=kube-system
    mode: ipvs
  • 设定kubectl
    在这里插入图片描述
  • node 节点上执行 kubeadm join 命令加入群集
    kubeadm join 192.168.2.66:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:aeeaa0e74c0854944d152aaf29f7b2f10863fc05a8dc1d73a7687b04bfde9e75
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

2.8 Master安装网络插卡

  • master上安装calico.yaml,解决STATUS notReady
    wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml --no-check-certificate
  • 编辑calico.yaml
    将pod cidr => 192.168.0.0/16 改为 10.244.0.0/16
  • 应用
    kubectl apply -f calico.yaml

3. 查询状态

3.1 查询node节点

  • kubectl get nodes
    在这里插入图片描述

3.2 查询pod

  • 查询所有pod
    kubectl get pods --namespace=kube-system
    在这里插入图片描述
  • 查询具体pod
    kubectl --namespace=kube-system describe pod podname
    在这里插入图片描述
  • 查询k8s版本
    kubectl version
    在这里插入图片描述

3.3 测试集群

  • 在集群创建pod
    kubectl create deployment nginx --image=nginx
    kubectl expose deployment nginx --port=80 --type=NodePort
  • 查看状态
    kubectl get pods
    kubectl get svc

3.4 部署Dashboard

  • 下载
    wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml
  • 修改Service为NodePort类型
    vim recommended.yaml
    在这里插入图片描述
  • 设定
    kubectl apply -f recommended.yaml
    kubectl get pods -n kubernetes-dashboard
    在这里插入图片描述
  • 访问
    https://NodeIP:30001

3.5 创建用户

  • 创建用户
    kubectl create serviceaccount dashboard-admin -n kube-system
  • 用户授权
    kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
  • 获取用户Token
    kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk ‘/dashboard-admin/{print $1}’)
    在这里插入图片描述
    在这里插入图片描述

4. Version1.18特性

4.1 Debug

4.2 Sidecar

4.3 Volumn

4.4 ConfigMap/Secret

5. Error

  • The connection to the server localhost:8080 was refused - did you specify the right host or port?
    1.编辑
    vim /etc/profile
    添加 => export KUBECONFIG=/etc/kubernetes/admin.conf
    2.更新
    source /etc/profile

6. Awakening

         在一秒钟内看到本质的人和花半辈子也看不清一件事本质的人,自然是不一样的命运。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据库】一文讲清redis的主从复制

目录 主从复制 一&#xff0c; 主从复制原理 二&#xff0c;主从复制配置 1&#xff0c;一主双从 1、配置三个redis示例 2、配置主从 3、集群测试 2&#xff0c; 主从切换 哨兵模式 一&#xff0c; 什么是哨兵模式 二&#xff0c; 配置哨兵 三&#xff0c;启动哨兵 …

公网远程连接Oracle数据库【内网穿透】

文章目录1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程OracleOracle&#xff0c;是甲骨文公司的一款关系数据库管理系…

阅读笔记8——NMS

一、基本NMS 1. 处理过程 为了保证物体检测的召回率&#xff0c;对于同一个真实物体往往会有多于1个的候选框输出。但是多余的候选框会影响检测精度&#xff0c;因此需要利用NMS过滤掉重叠的候选框&#xff0c;基本的NMS方法利用得分高的边框抑制得分低且重叠程度高的边框。 如…

追梦之旅【数据结构篇】——详解C语言实现链栈

详解C语言实现链栈~&#x1f60e;前言&#x1f64c;整体实现内容分析&#x1f49e;1.头文件编码实现&#x1f64c;2.功能文件编码实现&#x1f64c;3.测试函数功能代码&#x1f64c;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右…

再获最佳推荐,华为高端存储凭什么征服DCIG?

近日&#xff0c;全球著名技术分析机构DCIG发布《DCIG 2023-24高端存储阵列TOP5》报告&#xff0c;华为OceanStor Dorado 18000凭借可靠性、易用性和安全性等诸多优势&#xff0c;在DELL EMC、IBM、HPE、PureStorage等一众国际厂商中脱颖而出&#xff0c;荣获最佳推荐榜首。一直…

Linux——进程概念(进程状态)

目录 进程状态 三态模型 五态模型 七态模型 Example eg1:阻塞态&#xff1a;等待某种资源的过程 eg2:挂起态 Linux内核源代码 Linux进程状态查看 Linux运行状态 R运行状态&#xff08;running&#xff09;: S睡眠状态&#xff08;sleeping)&#xff1a; D磁盘休眠状…

Android Json 数据解析优化

文章目录基于 Gson 的 Json 数据解析库1. 背景2. 使用2.1 在模块下的 build.gradle 文件中加入远程依赖2.2 常规使用2.3 其它 API2.3 Retrofit 替换 Gson3. Json 数据解析库 UML 类图与时序图3.1 json-parse 类图3.2 json-parse 时序图4. Json 工具类&#xff08;JsonUtils&…

运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO

本文主要介绍正运动技术EtherCAT控制器在VS平台采用C语言实现的各种PSO功能。正运动提供多种PSO模式供用户搭配不同的场景使用。 本节主要讲解采用TABLE寄存器存储的数据表触发比较&#xff0c;更多周期比较模式、二维三维比较模式参见下一节说明。 一、硬件介绍 ZMC408CE是…

STM32 CubeMX按键点灯

本文代码使用 HAL 库。 文章目录前言一、按键原理图二、CubeMX 创建工程三、代码讲解&#xff1a;1. GPIO的输入HAL库函数&#xff1a;2. 消抖&#xff1a;3. 详细代码四&#xff0c;实验现象&#xff1a;总结前言 我们继续讲解 stm32 f103&#xff0c;这篇文章将详细 为大家讲…

MATLAB | 如何用MATLAB绘制花里胡哨的山脊图

本期推送教大家如何绘制各种样式的山脊图&#xff0c;这里做了一个工具函数用来实现好看的山脊图的绘制&#xff0c;编写不易请多多点赞&#xff0c;大体绘制效果如下&#xff1a; 依旧工具函数放在文末。 教程部分 0 数据准备 数据为多个一维向量放在元胞数组中&#xff0c;…

oracle数据库常用操作

1.连接登录切换用户su - oracle以管理员模式登录到sqlplus&#xff1a;sqlplus / as sysdba oracle登录身份有三种&#xff1a;1.1Normal 普通身份&#xff1b;1.2.sysdba 系统管理员身份&#xff1b;若以 ‘sysdba’ 方式认证&#xff0c;登录用户为 ‘SYS’&#xff0c;为 Or…

spring事务管理器原理?mybatis如何集成spring事务管理器?

目录 1. spring事务管理器开启事务做了些什么事情&#xff1a; 1.1 创建mysql数据库连接&#xff1a; 1.2 开启mysql事务 1.3 将当前事务所使用的连接绑定到ThreadLocal中,供后续执行sql命令使用。 2. mybatis如何集成spring事务管理器&#xff1f; 3. mysql相关命令 4. …

Java常用框架(三)

三、SpringBoot 1.Spring及其优缺点&#xff1f; 1.1 概念 重量级企业开发框架EJB的替代品&#xff0c;通过依赖注入、面向切面编程&#xff0c;使用简单Java对象POJO为企业Java开发提供了相对简单的方法。 1.2 优缺点 1.2.1 优点 组件代码轻量级 1.2.1 缺点 配置重量级…

Spring Batch 高级篇-多线程步骤

目录 引言 概念 案例 转视频版 引言 接着上篇&#xff1a;Spring Batch ItemWriter组件&#xff0c;了解Spring Batch ItemWriter处理组件后&#xff0c;接下来一起学习一下Spring Batch 高级功能-多线程步骤 概念 默认的情况下&#xff0c;步骤基本上在单线程中执行&…

springBoot使用ShardingJDBC实现分表

ShardingSphere的介绍 ShardingSphere是一款起源于当当网内部的应用框架。2015年在当当网内部诞 生&#xff0c;最初就叫ShardingJDBC。2016年的时候&#xff0c;由其中一个主要的开发人员张亮&#xff0c; 带入到京东数科&#xff0c;组件团队继续开发。在国内历经了当当网、…

链动2+1系统|购买三单就能迅速回本,链动2+1模式到底有多暴利?

链动21模式号称起步创业无泡沫&#xff0c;半个月就能盈利上百万&#xff0c;用户裂变速度更是让人瞠目结舌。那么&#xff0c;链动21模式到底有多暴利&#xff1f;其实链动21模式最关键的&#xff0c;是合理的利润分配和奖励机制&#xff0c;让消费者在购物的同时&#xff0c;…

【解决报错】‘jupyter‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

在当前路径下使用cmd打开后&#xff0c;输入jupyter notebook出现如下错误&#xff1a; 通常可能出现的问题有两种&#xff1a; &#xff08;1&#xff09;你本身就没安装jupyter&#xff0c;如果你配置了anaconda&#xff0c;就自带jupyter&#xff0c;直接跳到问题2。如果确…

Confluence主页面更新记录停留在去年,搜索也只能搜索去年之前的数据问题解决方案

问题描述 Confluence主页最近更新页面不更新了&#xff0c;停留在之前的时间段。其次搜索也只能搜索出来停留在这个时间段之前的数据。 核心原因 索引出现问题了&#xff0c;重建索引即可。 解决办法 直接重启Confluence。 重启Confluence的姿势 描述一下我解决思路&…

28-vuex

vuex 一、vuex 专门在vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xff0c;对Vue应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&#xff0c;且适用于任意组件间通信。 使用场景&a…

Java 【数据结构OJ题十道】—— 二叉树篇1

文章目录一、 检查两棵二叉树是否相同二、 另一棵二叉树的子树三、 二叉树的构建及遍历四、序列化二叉树和反序列化二叉树(难)五、二叉树创建字符串六、 二叉树前序非递归遍历实现七、 二叉树中序非递归遍历实现八、 二叉树后序非递归遍历实现九、二叉搜索树中找到两个结点的最…