基于Centos搭建k8s仓库
系统环境:
Red Hat Enterprise Linux 9.1 (Plow)
Kernel: Linux 5.14.0-162.6.1.el9_1.x86_64
主机名 | 地址 |
master | 192.168.19.128 |
node01 | 192.168.19.129 |
node02 | 192.168.19.130 |
目录
1、关闭防火墙,关闭SElinxu ,开启时间同步服务
2、关闭swap
3、网络参数调整
4、建立仓库
6、下载必要的软件包
7、启动服务
8、重新拉取镜像
9、关闭虚机进行克隆
k8s初始化
1、关闭防火墙,关闭SElinxu ,开启时间同步服务
[root@Vivyan ~]# systemctl stop firewalld
[root@Vivyan ~]# systemctl disable firewalld
[root@Vivyan ~]# vim /etc/sysconfig/selinux #SELINUX=permissive
[root@Vivyan ~]# setenforce 0
[root@Vivyan ~]# systemctl restart chronyd
[root@Vivyan ~]# systemctl enable chronyd
2、关闭swap
[root@master ~]# tail -n 2 /etc/fstab
#/dev/mapper/rhel-swap none swap defaults 0 0
[root@Vivyan ~]# swapon -sFilename Type Size Used Priority
/dev/dm-1 partition 2097148 157696 -2
[root@Vivyan ~]# swapoff /dev/dm-1
[root@Vivyan ~]# free -m
total used free shared buff/cache available
Mem: 1743 1479 61 26 380 264
Swap: 0 0 0
3、网络参数调整
#配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
[root@Vivyan ~]# cat /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-cal1-iptables = 1
net.ipv4.ip_forward = 1
#生效
[root@Vivyan ~]# systctl -p
#配置生效
[root@Vivyan ~]# modprobe br_netfilter
[root@Vivyan ~]# lsmod | grep br_netfilter
br_netfilter 32768 0
bridge 315392 1 br_netfilter
4、建立仓库
[root@Vivyan yum.repos.d]# cat k8s.repo
[k8s]
name=k8s
baseurl=Index of /kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
[root@Vivyan yum.repos.d]# cat xixi.repo
[baseos]
name=baseos
baseurl=/mnt/BaseOS
gpgcheck=0
[AppStream]
name=AppStream
baseurl=/mnt/AppStream
gpgcheck=0
5、创建仓库并挂载
[root@Vivyan yum.repos.d]# wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
[root@Vivyan yum.repos.d]# sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
[root@Vivyan yum.repos.d]# mount /dev/sr0 /mnt
mount: /mnt: /dev/sr0 already mounted on /mnt/cdrom.
6、下载必要的软件包
[root@Vivyan yum.repos.d]# dnf install -y iproute-tc yum-utils device-mapper-persistent-data lvm2 kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3 docker-ce
如果docker-ce下载失败,解决办法:
[root@Vivyan yum.repos.d]# dnf remove podman -y
[root@Vivyan yum.repos.d]# dnf install -y docker-ce [--allowerasing]
7、启动服务
[root@Vivyan yum.repos.d]# systemctl enable kubelet
[root@Vivyan yum.repos.d]# systemctl enable --now docker
编辑json仓库
[root@Vivyan yum.repos.d]# vim /etc/docker/daemon.json
{ "exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://8zs3633v.mirror.aliyuncs.com"]
}
[root@Vivyan yum.repos.d]# systemctl restart docker #重启仓库
[root@Vivyan yum.repos.d]# systemctl status docker #查看状态
8、重新拉取镜像
列出当前镜像
[root@Vivyan ~]# kubeadm config images list
I0528 15:01:02.677618 6941 version.go:254] remote version is much newer: v1.27.2; falling back to: stable-1.21
k8s.gcr.io/kube-apiserver:v1.21.14
k8s.gcr.io/kube-controller-manager:v1.21.14
k8s.gcr.io/kube-scheduler:v1.21.14
k8s.gcr.io/kube-proxy:v1.21.14
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0
拉取镜像
docker pull kittod/kube-apiserver:v1.21.3
docker pull kittod/kube-controller-manager:v1.21.3
docker pull kittod/kube-scheduler:v1.21.3
docker pull kittod/kube-proxy:v1.21.3
docker pull kittod/pause:3.4.1
docker pull kittod/etcd:3.4.13-0
docker pull kittod/coredns:v1.8.0
docker pull kittod/flannel:v0.14.0
重新标记
docker tag kittod/kube-apiserver:v1.21.3 k8s.gcr.io/kube-apiserver:v1.21.3
docker tag kittod/kube-controller-manager:v1.21.3 k8s.gcr.io/kube-controller-manager:v1.21.3
docker tag kittod/kube-scheduler:v1.21.3 k8s.gcr.io/kube-scheduler:v1.21.3
docker tag kittod/kube-proxy:v1.21.3 k8s.gcr.io/kube-proxy:v1.21.3
docker tag kittod/pause:3.4.1 k8s.gcr.io/pause:3.4.1
docker tag kittod/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker tag kittod/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
docker tag kittod/flannel:v0.14.0 quay.io/coreos/flannel:v0.14.0
查看镜像
[root@Vivyan ~]#docker images
删除
docker rmi kittod/kube-apiserver:v1.21.3
docker rmi kittod/kube-controller-manager:v1.21.3
docker rmi kittod/kube-scheduler:v1.21.3
docker rmi kittod/kube-proxy:v1.21.3
docker rmi kittod/pause:3.4.1
docker rmi kittod/etcd:3.4.13-0
docker rmi kittod/coredns:v1.8.0
docker rmi kittod/flannel:v0.14.0
9、关闭虚机进行克隆
关闭: init 0 / poweroff
克隆个数:2个 (本地解析、改IP地址、免密登录)
ping master
ping node1
ping node2
本地解析 hosts文件
192.168.19.128 master
192.168.19.129 node01
192.168.19.130 node02
发送到另外两个主机
scp /etc/hosts root@192.168.19.129:/etc/
scp /etc/hosts root@192.168.19.130:/etc/
改主机名
hostnamectl set-hostname master/node01/node02
改IP地址
nmcli connection modify ens160 ipv4.addresses 192.168.19.130/24
nmcli connection modify ens160 ipv4.gateway 192.168.19.2
nmcli connection modify ens160 ipv4.dns 114.114.114.114
nmcli connection modify ens160 ipv4.method manual
nmcli connection modify ens160 connection.autoconnect yes
nmcli connection up ens160
免密登录(三个主机分别做完后,ssh登录主机可不要密码)
ssh-keygen
ssh-copy-id root@master
ssh-copy-id root@node01
ssh-copy-id root@node02
k8s初始化
kubeadm init \
--kubernetes-version=v1.21.3 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.19.128
如果不成功:
systemctl stop kubelet
rm -rf /etc/kubernetes/*
systemctl stop docker
如果停止失败
reboot
docker container prune docker ps -a
初始化成功后把以下内容复制到某个地方以备后用
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:
#节点加入集群
kubeadm join 192.168.19.128:6443 --token hbax17.wm0rhemz2pm2h9ai \
--discovery-token-ca-cert-hash sha256:38171a1e6706a749bdf7812277272bbfd23a479c604194e643cfcd4c8213f68e
下载文件
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
……
daemonset.apps/kube-flannel-ds created
然后将 node01 和 node02 加入集群,然后查看集群pod状态便可看到他们两个的节点状态和运行状态
查看节点状态
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 4m59s v1.21.3
node01 Ready <none> 107s v1.21.3
node02 Ready <none> 104s v1.21.3
如果忘了master初始化完成之后的节点加入集群指令,请在master主机输入一下指令: kubeadm token create --print-join-command
如果节点加入失败:
1、kubeadm reset -y
2、rm -rf /etc/kubernetes/kubelet.conf
rm -rf /etc/kubernetes/pki/ca.crt
systemctl restart kubelet
查看集群pod状态
[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-558bd4d5db-597rj 1/1 Running 0 4m5s
coredns-558bd4d5db-qj9n4 1/1 Running 0 4m6s
etcd-master 1/1 Running 0 4m14s
kube-apiserver-master 1/1 Running 0 4m14s
kube-controller-manager-master 1/1 Running 0 4m14s
kube-proxy-4qkht 1/1 Running 0 72s
kube-proxy-bgmv5 1/1 Running 0 70s
kube-proxy-zjd2z 1/1 Running 0 4m6s
kube-scheduler-master 1/1 Running 0 4m14s在节点上查看日志
journalctl -f -u kubelet
如果节点状态为notready,可以查看节点日志,大多原因是镜像拉取失败
********************************************************
docker pull kittod/pause:3.4.1
docker tag kittod/pause:3.4.1 k8s.gcr.io/pause:3.4.1
docker pull kittod-kube-proxy:v1.21.3
docker tag kittod/kube-proxy:v1.21.3 k8s.gcr.io/kube-proxy:v1.21.3
reboot
********************************************************
自动补齐
echo "source <(kubectl completion bash)" >> /root/.bashrc source /root/.bashrc
拉取镜像 [root@master ~]# docker pull nginx
重新标记 docker tag nginx:latest kittod/nginx:1.21.5
创建部署 kubectl create deployment nginx --image=kittod/nginx:1.21.5
暴露端口 kubectl expose deployment nginx --port=80 --type=NodePort
查看pod和服务 kubectl get pods,service
查看映射的随机端口 netstat -lntup | grep 30392
测试nginx服务 curl localhost:30392
具体步骤
[root@master ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest[root@master ~]# docker tag nginx:latest kittod/nginx:1.21.5
[root@master ~]# kubectl create deployment nginx --image=kittod/nginx:1.21.5
deployment.apps/nginx created[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed[root@master ~]# kubectl get pods,service
NAME READY STATUS RESTARTS AGE
pod/nginx-8675954f95-b84t7 0/1 Pending 0 2m48sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 177m
service/nginx NodePort 10.107.157.167 <none> 80:30684/TCP 2m28s
[root@master ~]# netstat -lntup | grep 30684
tcp 0 0 0.0.0.0:30684 0.0.0.0:* LISTEN 5255/kube-proxy[root@master ~]# curl localhost:30684
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
相关文章:
基于Centos搭建k8s仓库
系统环境: Red Hat Enterprise Linux 9.1 (Plow) Kernel: Linux 5.14.0-162.6.1.el9_1.x86_64 主机名地址master192.168.19.128node01192.168.19.129node02192.168.19.130 目录 1、关闭防火墙,关闭SElinxu ,开启时间同步服务 2、关…...

浅谈泛在电力物联网发展形态与技术挑战
安科瑞 华楠 摘 要:泛在电力物联网是当前智能电网发展的一个方向。首先,总结了泛在电力物联网的主要作用和价值体现;其次,从智能电网各个环节概述了物联网技术在电力领域的已有研究和应用基础;进而,构思并…...
git reset --soft 用法
git reset --soft 是 Git 命令中的一个选项,它用于取消之前的提交,并将取消的更改保留在暂存区。这允许您重新组织提交历史或将更改合并到一个新的提交中,而不影响暂存区和工作目录中的更改。 这个命令的语法是: git reset --so…...

哪些测试仪器可以用于检测静电中和设备的性能
静电设备性能测试通常需要使用一些专门的仪器来进行。以下是一些常见的静电设备性能测试仪器: 1. 静电电压测试仪:用于测量物体表面的静电电压。它通常可以测量正负电压,并具有高精度和快速响应的特点。 2. 静电电荷仪:用于测量物…...

浅析 GlusterFS 与 JuiceFS 的架构异同
在进行分布式文件存储解决方案的选型时,GlusterFS 无疑是一个不可忽视的考虑对象。作为一款开源的软件定义分布式存储解决方案,GlusterFS 能够在单个集群中支持高达 PiB 级别的数据存储。自从首次发布以来,已经有超过十年的发展历程。目前&am…...

ARM开发,stm32mp157a-A7核PWM实验(驱动蜂鸣器,风扇,马达工作)
1.分析框图; 2.比较捕获寄存器(产生PWM方波); 工作原理: 1、系统提供一个时钟源209MHZ,需要通过分频器进行分频,设置分频器值为209分频; 2、当定时器启动之后,自动重载…...
群狼调研(长沙眼镜店神秘顾客)|消费者需求研究方案
本文由群狼调研(长沙品牌调研)出品,欢迎转载,请注明出处。消费者需求研究方案是在开展研究之前制定的计划,用于指导研究的设计、实施和分析。以下是一个可能的消费者需求研究方案的大致框架: 1. 研究目标和问题: • …...
电脑入门:宽带路由器常见故障排除技巧
宽带路由器在企业网络中的应用是相当广泛的,在运行的过程中出现故障是在所难免的,虽然故障现象多种多样,引起故障发生的原因也不尽相同,但从大体上可以把这些故障分为硬件故障和软件故障,具体来说就是一些网络连接性问题、配置文件选项问题以及网络协议问题等。 由于路由器…...

基于云原生网关的流量防护实践
作者:涂鸦 背景 在分布式系统架构中,每个请求都会经过很多层处理,比如从入口网关再到 Web Server 再到服务之间的调用,再到服务访问缓存或 DB 等存储。在下图流量防护体系中,我们通常遵循流量漏斗原则进行流量防护。…...

开源与云计算:新的合作模式
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

前端需要理解的跨平台知识
混合开发是指使用多种开发模开发App的一种开发模式,涉及到两大类技术:原生 Native、Web H5。原生 Native 主要指 iOS(Objective C)、Android(Java),原生开发效率较低,开发完成需要重…...
《基于 Vue 组件库 的 Webpack5 配置》3.将 CSS 提取到单独的文件
使用 webpack 插件 mini-css-extract-plugin 需要额外安装 npm i mini-css-extract-pluginlatest -D; 同时打包 js 和 css 文件时,可参考 entry 高级用法; package.json 的配置如下 const { VueLoaderPlugin } require(vue-loader); // 可…...

2023CCF图形学启明星计划夏令营感想记录
这篇就是纯日记了,想记录一下参加这个夏令营的感想,中间的一些过程,毕竟这对我来说算是一段难忘的经历。 一、了解到的渠道 我个人是比较喜欢图形渲染的,之前也学过GAMES的课程,然后偶然的一天,GAMES101里…...

如何解决“缺失msvcp110.dll”错误,msvcp110.dll丢失要怎样才能修复
今天,我将为大家分享关于电脑提示msvcp110.dll丢失的3种修复方法。希望这些方法能帮助到正在遇到这个问题的朋友们。 首先,我们来了解一下msvcp110.dll文件的作用。msvcp110.dll是Microsoft Visual C 2010 Redistributable Package的一部分,…...

激活函数总结(二十):激活函数补充(SQNL、PLU)
激活函数总结(二十):激活函数补充 1 引言2 激活函数2.1 Square nonlinearity (SQNL)激活函数2.2 Piecewise Linear Unit (PLU)激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PR…...
Docker【部署 04】Docker Compose下载安装及实例Milvus Docker compose(CPU)使用说明分享
Docker Compose 下载安装使用说明 1.Compose说明1.1 Overview of installing Docker Compose1.2 Installation scenarios1.2.1 Scenario one: Install Docker Desktop1.2.2 Scenario two: Install the Compose plugin1.2.3 Scenario three: Install the Compose standalone 2.C…...
23种设计模式-7种结构模式
结构型模式简述 把类或对象结合在一起形成一个更大的结构。 装饰器模式:动态的给对象添加新的功能。 代理模式:为其它对象提供一个代理以便控制这个对象的访问。 桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立的变…...

大数据Flink(六十七):SQL Table 简介及运行环境
文章目录 SQL & Table 简介及运行环境 一、简介 二、案例...
WPF使用依赖注入
现在依赖注入在.Net里面已经普及,自己常写一些简单的demo倒是无所谓,但偶尔写一点正式的工程,也免不了要使用一下,于是总结了一下在WPF里面使用依赖注入。 在写简单Demo时候,通常是在MainWindow的构造函数里面直接做初…...

玩转科技|了解AI平台桌面客户端—ChatBox
目录 前言 特性 编辑 为什么需要 ChatBox? ChatGPT Plus 平替? 下载 支持系统 功能图 使用教程 感受 展示 前言 今天小编又来了,推荐给大家一款开源的OpenAI API桌面客户端ChatBox,它支持 Windows、Mac 和 Linux。…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
使用python进行图像处理—图像滤波(5)
图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值,以达到平滑(去噪)、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算,…...