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

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 | 节点类型 |
---|---|---|
1 | 10.136.217.11 | master |
2 | 10.136.217.12 | mode |
3 | 10.136.217.13 | node |
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
#永久关闭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
在一秒钟内看到本质的人和花半辈子也看不清一件事本质的人,自然是不一样的命运。
相关文章:

Kubernetes入门教程 --- 使用kubeadm进行集群安装
Kubernetes入门教程 --- 使用kubeadm和二进制安装1. Introduction1.1 架构图1.2 关键字介绍1.3 简述2. 使用Kubeadm Install2.1 申请三个虚拟环境2.2 准备安装环境2.3 配置yum源2.4 安装Docker2.5 时间同步2.6 安装组件2.7 部署集群2.8 Master安装网络插卡3. 查询状态3.1 查询n…...
华为OD机试真题Python实现【相对开音节】真题+解题思路+代码(20222023)
相对开音节 题目 相对开音节构成的结构为辅音+元音(aeiou)+辅音(r除外) 常见的单词有bike cake 给定一个字符串,以空格为分隔符 反转每个单词的字母 若单词中包含如数字等其他非字母时不进行反转 反转后计算其中含有相对开音节结构的子串个数 (连续子串中部分字符可以重复) …...

海思SD3403/SS928V100开发(5)MIPI_YUV相机vio sample开发----修改思路
1. 前言 sensor输出格式: YUV422 8bit 硬件连接: MIPI_YUV相机(4lane MIPI) -> SS928V100 MIPI0(4lane) 框图: 2. 几个问题 基于SS928 SDK中的 vio sample修改; 但是sample里面都是基于RAW RGB sensor开发的sample, 没有现成的MIPI_YUV sensor的参考,需要自己…...

javaee之node.js与es6
问题1:在IDEA控制台为什么node显示不会出来命令 修改完之后记得重新启动电脑 问题2:response.end()作用 在Web开发中,浏览器端的请求到达服务器进行处理的时候,Response.End的作用就是让request执行到此结束,输出到客户…...

11 nacos源码开篇
nacos核心功能点: 服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存…...

13.Jenkins集成sonarqube
Jenkins集成sonarqube1.jenkins集成sonarqube2.jenkins以maven的方式集成sonarqube scanner报错1报错21.jenkins集成sonarqube 1.在jenkins插件管理中安装sonarqube scanner 2.jenkins要知道sonarqube服务端是谁,需要配置(系统管理–系统配置–sonarq…...

JavaWeb13-线程休眠和指定唤醒:LockSupport
目录 1.LockSupport.park():休眠当前线程 2.LockSupport.unpark(线程对象):唤醒某一个指定的线程 3.扩展:LockSupport.parkUntil(long)等待最大时间是一个固定时间 4.LockSupport和Interrupt 5.LockSupport VS wait 相同点:…...

【第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性)】
第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性) 1.Spring是什么? ①Spring是一款主流的java EE 轻量级开源框架。 ②广义的Spring:Spring技术栈,Spring不再…...
前端react面试题(边面边更)
展示组件(Presentational component)和容器组件(Container component)之间有何不同 展示组件关心组件看起来是什么。展示专门通过 props 接受数据和回调,并且几乎不会有自身的状态,但当展示组件拥有自身的状态时,通常也只关心 UI 状态而不是…...
产品3C认证在哪里办理
一、什么是CCC认证 3C认证的全称为“中国强制性产品认证”,英文名称China Compulsory Certification,英文缩写CCC。它是中国政府为保护消费者人身安全和国家安全、加强产品质量管理、依照法律法规实施的一种产品合格评定制度。年12月,国家…...

UA-DETRAC数据集转YOLO格式
一: 数据集下载 原官方数据集 链接:https://pan.baidu.com/s/1P_CeSIpJIYSA1dykmFhgYw 提取码: 7f4g 处理完成数据集(每10帧取一张) 链接:后续添加 提取码:后续添加 二: 处理标…...

代码随想录---二叉树的总结和二叉树的定义
二叉树的种类: 满二叉树:树的所有节点都是满,即都有左右孩子。 这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。 完全二叉树:完全二叉树的定义如下:在完全二叉树中,…...
Hive SQL 执行计划
我们在写Hive SQL的时候,难免会在运行的时候有报错,所以知道Hive SQL的执行计划具体是什么,然后假如在之后的运行过程中有报错,可以根据执行计划定位问题,调试自己的SQL开发脚本。 一、含义 Hive SQL的执行计划描述S…...
MySQL InnoDB引擎——三层B+树可以存储多少数据量
先说结论: 3层B树大概可以存: 主键为bigint:约2000w主键为int:约4000w*备注: 在《阿里开发手册》中建议,单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表,如果预计三年后…...

部署跨云容灾的五大难点
为什么企业需要跨云容灾? 据统计,全球已有70%的企业使用云计算服务。上云帮助企业更高效地管理数据资产,但它并非绝对安全。如停电、漏水等机房事故;地震、火灾等自然性灾害;亦或是人为失误,都有可能造成数…...

Docker Compose
为什么需要使用Docker ComposeDocker Compose 容器编排技术1、现在我们有一个springboot项目,需要依赖Redis、mysql、nginx。如果使用docker原生部署的话,则需要安装Redis、mysql、nginx容器,才可以启动我们springboot项目,这样的…...

【ARM架构】armv8 系统安全概述
ARMv8-A 系统中的安全 一个安全或可信的操作系统保护着系统中敏感的信息,例如,可以保护用户存储的密码,信用卡等认证信息免受攻击。 安全由以下原则定义: 保密性:保护设备上的敏感信息,防止未经授权的访问…...
数学小课堂:数学边界
文章目录 引言I 费马大定理1.1毕达哥拉斯定理的推广1.2 一波三折的定理证明过程1.3 希尔伯特第十问题II 数学的边界2.1 认识论问题2.2 在边界内做事情2.3 总结引言 了解数学本身的局限性,才能更好地使用它的原理和思维方式。 数学的边界,这是一个硬的边界,大家不要试图逾越…...

检测中断到来时,让LED灯状态取反,并且在串口工具上打印一句话
任务:检测中断到来时,让LED灯状态取反,并且在串口工具上打印一句话例如:当按键1按下之后,让LED1状态取反,并打印“LED1 down”当按键2按下之后,让LED2状态取反,并打印“LED2 down”当…...
2023年CDGA考试-第7章-数据安全(含答案)
2023年CDGA考试-第7章-数据安全(含答案) 单选题 1.数据安全不仅涉及防止不当访问,也涉及对数据的适当访问,下列理解不正确的是 ( ) A.强密码有助于提高破解风险 B.安全专家建议 45-180天修改一次密码 C.用户要尽量使用多套密码和账户 D.具有高度敏感信息权限的用户都应使…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...