k8s集群搭建

文章目录

  • 前言
  • 一、前置准备
    • 1.1 虚拟机准备
    • 1.2 关闭swap分区
    • 1.3 将桥接的IPv4流量传递到iptables链
    • 1.4 开启ipvs
  • 二、容器化环境和组件安装
    • 2.1 docker安装
    • 2.2 设置docker加速镜像器
    • 2.4 设置yum镜像源
    • 2.5 安装kubeadm、kubelet和kubectl
  • 三、集群搭建
    • 3.1 安装k8s所需镜像
    • 3.2 在hadoop1上部署master节点
    • 3.3 在hadoop2、hadoop3上执行加入集群命令
    • 3.4部署网络插件
    • 3.5 在hadoop1也就是master节点上设置 kube-proxy 的 ipvs 模式
    • 3.6 node节点也能使用kubectl指令
    • 3.7 服务部署
    • 3.8安装自动补全
    • 3.9 安装dashboard
    • 3.10 登录dashboard
  • 四、参考资料
  • 总结


前言

k8s集群搭建


一、前置准备

1.1 虚拟机准备

准备三台虚拟机,我这里准备了三台机器,

主机名内核版本系统版本ip
hadoop1Linux 3.10.0-1160.el7.x86_64CentOS Linux release 7.9.2009 (Core)192.168.184.129
hadoop2Linux 3.10.0-1160.el7.x86_64CentOS Linux release 7.9.2009 (Core)192.168.184.130
hadoop3Linux 3.10.0-1160.el7.x86_64CentOS Linux release 7.9.2009 (Core)192.168.184.131

机器之间可以免密登录,关闭防火墙,还有时间同步做好,关闭swap分区。

1.2 关闭swap分区

1.关闭swap分区
swapoff -a
2.修改 Swappiness
sudo vim /etc/fstab
注释掉以下这行
#/dev/sda2    none   swap   sw   0   0
4.使配置生效,不用重启
sysctl -p   

1.3 将桥接的IPv4流量传递到iptables链

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
#加载br_netfilter模块
modprobe br_netfilter#查看是否加载
lsmod | grep br_netfilter#使生效
sysctl --system#拓展:持久化修改(保留配置包本地文件,重启系统或服务进程仍然有效)
sysctl -p

1.4 开启ipvs

#在三台机器安装 ipset 和 ipvsadm :
yum -y install ipset ipvsadm#在三台机器执行如下脚本:
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF#授权、运行、检查是否加载:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

二、容器化环境和组件安装

2.1 docker安装

代码如下(示例):

#卸载旧版本docker(如有)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine# yum安装 gcc 相关软件,安装yum工具包
yum -y install gcc gcc-c++
yum -y install yum-utils#设置阿里云的stable 镜像仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#更新 yum 软件包索引
yum makecache fast#安装指定版本的 Docker(v20.10.8:
yum -y install docker-ce-3:20.10.8-3.el7.x86_64 docker-ce-cli-1:20.10.8-3.el7.x86_64 containerd.io#启动docker并设置开机自启
systemctl start docker
systemctl enable docker#验证 Docker 是否安装成功:
systemctl status docker
docker -v

2.2 设置docker加速镜像器

mkdir -p /etc/docker#配置阿里云镜像加速:
tee /etc/docker/daemon.json <<-'EOF'
{"exec-opts": ["native.cgroupdriver=systemd"],	"registry-mirrors": ["https://du3ia00u.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://registry.docker-cn.com"],"live-restore": true,"log-driver":"json-file","log-opts": {"max-size":"500m", "max-file":"3"},"max-concurrent-downloads": 10,"max-concurrent-uploads": 5,"storage-driver": "overlay2"
}
EOF#使之生效并重启docker
systemctl daemon-reload
systemctl restart docker

2.4 设置yum镜像源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#清除缓存并更新软件包列表
yum clean all
yum makecache
yum list

2.5 安装kubeadm、kubelet和kubectl

yum install -y kubelet-1.21.10 kubeadm-1.21.10 kubectl-1.21.10#查看安装版本:
kubelet --version

为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,修改"/etc/sysconfig/kubelet"文件为以下内容:

vi /etc/sysconfig/kubelet# 修改为
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动

systemctl enable kubelet

三、集群搭建

3.1 安装k8s所需镜像

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0

3.2 在hadoop1上部署master节点

kubeadm init \--apiserver-advertise-address=192.168.184.129 \--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \--kubernetes-version=v1.21.10 \--service-cidr=10.96.0.0/16 \--pod-network-cidr=10.244.0.0/16

说明
apiserver-advertise-address =Master节点的 IP 地址。
image-repository=容器镜像的仓库地址。
kubernetes-version= 安装的kubernetes版本号。
service-cidr 和 apiserver-advertise-address 、pod-network-cidr 不能在同一个网络范围内。
不要使用 172.17.0.1/16 网段范围,因为这是 Docker 默认使用的。

.拷贝kubectl使用的连接k8s认证文件到默认路径,根据日志提示,想要开始使用集群,需要在 master节点机器上(192.168.184.129 )执行如下命令在这里插入代码片

#创建目录存放 Kubernetes 的配置文件并配置 Kubernetes 客户端工具 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config#将 $HOME/.kube/config 文件的权限修改为当前用户
chown $(id -u):$(id -g) $HOME/.kube/config# 如果是 root 用户,可以执行如下命令,在使用 kubectl 命令时就不需要每次都指定配置文件的路径
export KUBECONFIG=/etc/kubernetes/admin.conf

生成token并且加入集群

#生成token,有效期2小时
kubeadm token create --print-join-command# 生成一个永不过期的token
kubeadm token create --ttl 0 --print-join-command#此时系统自动生成了一个kubeadm join命令,这个命令是用来将一个新的节点加入到 Kubernetes 集群中的。说明:
kubeadm join 192.168.79.101:6443    ----集群的 API Server 地址--token y1aqpl.ktwweub0h338qh46   ----用来认证新节点的凭证--discovery-token-ca-cert-hash sha256:dca999e4b0fdd14b7e92a6ed3cd1fbfedad273ba409e0bc5a76ebc947bd1f3b2

使用永久token生成的指令如下

在这里插入图片描述

3.3 在hadoop2、hadoop3上执行加入集群命令

kubeadm join 192.168.184.129:6443  --token fuxv3x.x7wqzybg7bb9kzis --discovery-token-ca-cert-hash sha256:48b064411c32aa2b7b7291d27351dbd871c5c21ed569167f0d8901b4c6c1af72

在这里插入图片描述

3.4部署网络插件

Kubernetes 支持多种网络插件,比如 flannel、calico、canal 等,任选一种安装即可,这里选择 calico。在 master节点(192.168.184.129 )上执行

kubectl apply -f https://projectcalico.docs.tigera.io/v3.19/manifests/calico.yaml

查看安装进度

kubectl get pods -n kube-system
#或者
watch kubectl get pods -n kube-system

在这里插入图片描述
状态都是ready安装成功。
此时查看节点状态都是安装好了。

kubectl get nodes

在这里插入图片描述

3.5 在hadoop1也就是master节点上设置 kube-proxy 的 ipvs 模式

kubectl edit cm kube-proxy -n kube-system

找到ipvs模块,将 mode: " " 双引号里面加上ipvs。
在这里插入图片描述

删除 kube-proxy ,让 Kubernetes 集群自动创建新的 kube-proxy

kubectl delete pod -l k8s-app=kube-proxy -n kube-system

3.6 node节点也能使用kubectl指令

在hadoop2、hadoop3上执行以下指令

mkdir -pv ~/.kube
touch ~/.kube/config

在hadoop1上拷贝配置文件到hadoop2、hadoop3

scp /etc/kubernetes/admin.conf root@hadoop2:~/.kube/config
scp /etc/kubernetes/admin.conf root@hadoop3:~/.kube/config

使用kubectl指令查看是否配置成功

kubectl get nodes

在这里插入图片描述

3.7 服务部署

1.部署nginx

kubectl create deployment nginx --image=nginx:1.14-alpine

2.暴露端口

kubectl expose deployment nginx --port=80 --type=NodePort
  1. 查看服务状态
kubectl get pods,svc

3.8安装自动补全

# 安装bash
yum -y install bash-completion
# 自动补全 
echo 'source <(kubectl completion bash)' >>~/.bashrc 
kubectl completion bash >/etc/bash_completion.d/kubectl
# 全局
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
source /usr/share/bash-completion/bash_completion

3.9 安装dashboard

1.设置域名映射

sudo bash -c 'echo "151.101.64.133 raw.githubusercontent.com" >> /etc/hosts'

2.获取文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

3.构建pod

kubectl apply -f recommended.yaml

在这里插入图片描述
4.查看pod状态

kubectl get pods --all-namespaces | grep dashboard
  1. 删除现有的 dashboard 服务
#查看所有命名空间namespace
kubectl get svc --all-namespaces#删除现有dashboard服务
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard

3.10 登录dashboard

1.创建一个nodePort类型的kubernetes-dashboard。进入/etc/kubernetes 目录下创建配置文件dashboard-svc.yaml

cd /etc/kubernetes
vi /etc/kubernetes/dashboard-svc.yaml

2.yaml文件,

kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:type: NodePortports:- port: 443targetPort: 8443selector:k8s-app: kubernetes-dashboard

3.创建服务

kubectl apply -f dashboard-svc.yaml

4.查看服务

kubectl get svc --all-namespaces
  1. 创建 kubernetes-dashboard 管理员角色,在/etc/kubernetes 目录下创建配置文件dashboard-svc-account.yaml,其内容如下
apiVersion: v1
kind: ServiceAccount
metadata:name: dashboard-adminnamespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: dashboard-admin
subjects:- kind: ServiceAccountname: dashboard-adminnamespace: kube-system
roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.io

6.使文件生效

kubectl apply -f dashboard-svc-account.yaml

7.获取token

kubectl get secret -n kube-system |grep admin|awk '{print $1}'#系统返回dashboard-admin-token-bvhwm,查看token
kubectl describe secret dashboard-admin-token-bvhwm -n kube-system|grep '^token'|awk '{print $2}'
8 查看外部访问端口```java
kubectl get svc --all-namespaces | grep dashboard

在这里插入图片描述
9.得到地址为
https://192.168.184.129:32696/
在页面空白处直接键盘输入,thisisunsafe 才能访问,否则访问不了
在这里插入图片描述
输入刚刚获取的token进入管理页面
在这里插入图片描述

四、参考资料

K8s集群搭建教程

总结

参考了该博客自己操作了一遍以及遇到的问题解决。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LAMP 配置与应用

LAMP 架构的组成 LAM(M)P&#xff1a; L&#xff1a;linux A&#xff1a;apache (httpd) M&#xff1a;mysql, mariadb P&#xff1a;php, perl, python apache的功能&#xff1a; 第一&#xff1a;处理http的请求、构建响应报文等自身服务&#xff1b; 第二&#xff1a…

【C#学习笔记】数据类中常用委托及接口——以List<T>为例

文章目录 List\<T\>/LinkedList \<T\>为什么是神&#xff1f;&#xff08;泛型为什么是神&#xff09;一些常见&#xff0c;通用的委托和接口ComparisonEnumerator List<T>/LinkedList <T>为什么是神&#xff1f;&#xff08;泛型为什么是神&#xff0…

数据结构(Java实现)-栈和队列

栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 先进后出 栈的使用 栈的模拟实现 上述的主要代码 public class MyStack {private int[] elem;private int usedSize;public MyStack() {this.elem new int[5];}Overridepublic …

-9501 MAL系统没有配置或者服务器不是企业版(dm8达梦数据库)

dm8达梦数据库 -9501 MAL系统没有配置或者服务器不是企业版&#xff09; 环境介绍1 环境检查2 问题原因 环境介绍 搭建主备集群时&#xff0c;遇到报错-9501 MAL系统没有配置或者服务器不是企业版 1 环境检查 检查dmmal.ini配置文件权限正确 dmdba:dinstall&#xff0c;内容正…

3.RabbitMQ 架构以及 通信方式

一、RabbitMQ的架构 RabbitMQ的架构可以查看官方地址 可以看出RabbitMQ中主要分为三个角色&#xff1a; Publisher&#xff1a;消息的发布者&#xff0c;将消息发布到RabbitMQ中的ExchangeRabbitMQ服务&#xff1a;Exchange接收Publisher的消息&#xff0c;并且根据Routes策…

安装虚拟机

软硬件准备 软件&#xff1a;推荐使用VMwear&#xff0c;我用的是VMwear 12 镜像&#xff1a;CentOS7 ,如果没有镜像可以在官网下载 &#xff1a;http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso 硬件&#xff1a;因为是在宿主机上运行虚拟…

Android屏幕显示 android:screenOrientation configChanges 处理配置变更

显示相关 屏幕朝向 https://developer.android.com/reference/android/content/res/Configuration.html#orientation 具体区别如下&#xff1a; activity.getResources().getConfiguration().orientation获取的是当前设备的实际屏幕方向值&#xff0c;可以动态地根据设备的旋…

Maven之hibernate-validator 高版本问题

hibernate-validator 高版本问题 hibernate-validator 的高版本&#xff08;邮箱注解&#xff09;依赖于高版本的 el-api&#xff0c;tomcat 8 的 el-api 是 3.0&#xff0c;满足需要。但是 tomcat 7 的 el-api 只有 2.2&#xff0c;不满足其要求。 解决办法有 2 种&#xff…

RocketMQ mqadmin java springboot python 调用笔记

命令 mqadmin命令列表 yeqiangyeqiang-MS-7B23:/opt/rocketmq-all-5.1.3-bin-release$ sh bin/mqadmin The most commonly used mqadmin commands are:updateTopic Update or create topicdeleteTopic Delete topic from broker and NameServer.…

【深度学习_TensorFlow】过拟合

写在前面 过拟合与欠拟合 欠拟合&#xff1a; 是指在模型学习能力较弱&#xff0c;而数据复杂度较高的情况下&#xff0c;模型无法学习到数据集中的“一般规律”&#xff0c;因而导致泛化能力弱。此时&#xff0c;算法在训练集上表现一般&#xff0c;但在测试集上表现较差&…

亿发浙江生产工厂信息化建设管理平台,实现生产智能化、数字化

在全球化、科技深刻变革的时代&#xff0c;浙江省信息化建设正迎来新的发展机遇。以物联网、人工智能大数据、为代表的新技术应用&#xff0c;为人类社会带来了智能、便捷&#xff0c;也标志着新一代信息化浪潮已经到来。特别是在生产型企业中&#xff0c;智能制造是生产型企业…

运用Python解析HTML页面获取资料

在网络爬虫的应用中&#xff0c;我们经常需要从HTML页面中提取图片、音频和文字资源。本文将介绍如何使用Python的requests库和BeautifulSoup解析HTML页面&#xff0c;获取这些资源。 一、环境准备 首先&#xff0c;确保您已经安装了Python环境。接下来&#xff0c;我们需要安…

HUT23级训练赛

目录 A - tmn学长的字符串1 B - 帮帮神君先生 C - z学长的猫 D - 这题用来防ak E - 这题考察FFT卷积 F - 这题考察二进制 G - 这题考察高精度 H - 这题考察签到 I - 爱派克斯&#xff0c;启动! J - tmn学长的字符串2 K - 秋奕来买瓜 A - tmn学长的字符串1 思路&#x…

CSS中如何实现背景图片的平铺和定位?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 平铺背景图片⭐ 背景图片定位⭐ 同时设置平铺和定位⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是…

3D点云处理:基于2D边缘提取的方法提取3D点云边缘(占位待补充)

文章目录 0. 实现效果 微信&#xff1a;dhlddx B站演示视频 0. 实现效果

1.1 数据库系统简介

思维导图&#xff1a; 1.1.数据库系统简介 前言&#xff1a; 数据库系统是一个软件系统&#xff0c;用于管理和操作数据库。它提供了一个组织良好、高效并能够方便存取的数据存储机制&#xff0c;并且能够支持各种数据操作、事务管理、并发控制和恢复功能。以下是数据库系统的…

基于PIC单片机温度-脉搏-DS18B20温度-液晶12864显示(proteus仿真+源程序)

一、系统方案 1、上电初始化液晶第一行显示脉搏&#xff0c;第二行显示温度&#xff0c;第三行显示模式&#xff0c;第四行显示强度&#xff1b;按下K1按键可以选择模式&#xff0c;催眼模式或治疗模式。 2、治疗模块下&#xff0c;可以通过K2、K3修改强度。 二、硬件设计 原理…

c++之指针

总结性质 我们如何在一个函数中获取数组的长度&#xff1a; 我们都知道&#xff0c;在main函数中我们获得数组的长度只需要使用sizeof&#xff08;a&#xff09;/sizeof&#xff08;a【0】&#xff09;即可获得&#xff0c;但当我们把一个数组传入到方法时&#xff0c;c默认把…

W5500-EVB-PICO进行UDP组播数据回环测试(九)

前言 上一章我们用我们的开发板作为UDP客户端连接服务器进行数据回环测试&#xff0c;那么本章我们进行UDP组播数据回环测试。 什么是UDP组播&#xff1f; 组播是主机间一对多的通讯模式&#xff0c; 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将…

完美解决Ubuntu网络故障,连接异常,IP地址一直显示127.0.0.1

终端输入ifconfig显示虚拟机IP地址为127.0.0.1&#xff0c;具体输出内容如下&#xff1a; wxyubuntu:~$ ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen …