CentOS7 部署 k8s

准备两台虚拟机
192.168.152.129
192.168.152.130
更改主机名
192.168.152.129:
hostnamectl set-hostname k8s-master
hostnamectl
192.168.152.130:
hostnamectl set-hostname k8s-node1
hostnamectl

master节点配置

1.配置hosts

在两台节点上执行vim /etc/hosts
把两台虚拟机ip地址加到后面;

192.168.152.129 k8s-master
192.168.152.130 k8s-node1

2.安装依赖包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vimnet-tools git

3.配置防火墙

设置防火墙为 Iptables 并设置空规则
systemctl stop firewalld && systemctl disable firewalld
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

4.关闭selinux

使用命令永久关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0

5.关闭swap分区

临时关闭 swapoff -a
# 永久关闭,下次生效 sed -ri 's/.*swap.*/#&/' /etc/fstab

6.调整内核参数

cat > kubernetes.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

7.调整系统时区

rm -f /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai
reboot

8.关闭系统不需要的服务

systemctl stop postfix && systemctl disable postfix

9.设置 rsyslogd 和 systemd journald

mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf << EOF
[Journal]
Storage=persistent
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
SystemMaxUse=10G
SystemMaxFileSize=200M
MaxRetentionSec=2week
ForwardToSyslog=no
EOF
systemctl restart systemd-journald

10.升级系统内核

CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定;
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含initrd16配置,如果没有,再安装一次;
cat /boot/grub2/grub.cfg | grep initrd16
yum --enablerepo=elrepo-kernel install -y kernel-lt
设置开机从新内核启动
grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)'
重启检查
reboot
uname -r

11.加载ip_vs内核模块

modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4

设置下次开机自动加载

cat > /etc/modules-load.d/ip_vs.conf << EOF 
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
EOF

12.安装Docker软件

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager \<br />--add-repo \<br />http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum update -y && yum install -y docker-ce

创建/etc/docker目录;
mkdir /etc/docker
配置daemon;

{
  "registry-mirrors": ["https://ii3bf0bm.mirror.aliyuncs.com"]
}
EOF

mkdir -p /etc/systemd/system/docker.service.d
重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

13.安装kubeadm,kubelet和kubectl

yum install -y kubelet-1.21.0-0 kubeadm-1.21.0-0 kubectl-1.21.0-0 --disableexcludes=kubernetes
出现的报错
image.png
解决办法:
编辑 /etc/yum.repos.d/k8s.repo 文件
修改一下参数:
repo_gpgcheck=0
然后重试yum update,就解决了。
这边是禁用了GPG key的验证机制;

systemctl restart kubelet ; systemctl enable kubelet

列出所有版本
yum list kubelet --showduplicates

14.master节点初始化

在 master 上的核心组件,例如 api-server、scheduler、kubelet、etcd、scheduler 等都是以容器的方式运行,由于默认的国外镜像站点可能无法访问,所以这里修改为阿里云镜像下载,同时需要指定版本和pod的网段地址:

kubeadm init --kubernetes-version=v1.21.0 \
--apiserver-advertise-address=0.0.0.0 \       # 后面可以换成master机器的IP尝试下
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

出现的报错:
报错2.jpg
因为有的时候我们要考虑各组件之间的版本兼容性,比如安装k8s的这3个组件的时候就要考虑k8s组件的版本是否与docker,Centos的版本相匹配。出现上述错误的原因就是镜像版本与kubeadm组件要求的版本不匹配,故报错。
可以使用kubeadm config images list查看组件所要求的镜像
解决方法:
需要对版本进行降级,或者重新安装匹配的版本。
/etc/yum.repos.d/kubernetes.repo文件中设置阿里镜像源,该文件若不存在则创建,存在则更改,编辑内容为:

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=1

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

使用**:wq**保存编辑并退出,这样就可以使用阿里源的仓库下载k8s的组件了。
然后使用rpm -qa | egrep kubelet列出kubelet组件安装包的全名,使用yum remove kubelet-1.21.0.x86_64卸载安装包即可。
下载1.14.2版本

yum install -y kubelet-1.14.2 
yum install -y kubeadm-1.14.2 
yum install -y kubectl-1.14.2

执行:
kubeadm init --kubernetes-version=v1.14.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
然后在执行kubeadm init
可能出现的报错:
报错3.jpg
原因显而易见,是因为要下载 k8s.gcr.io的docker镜像,但是国内连不上 https://k8s.gcr.io/v2/
解决方法:
运行 kubeadm init 时加上阿里云镜像的参数 --image-repository=registry.aliyuncs.com/google_containers

如果说某次执行kubeadm init初始化k8s集群失败了,在下一次执行kubeadm init初始化语句之前,先执行kubeadm reset命令。这个命令的作用是重置节点,大家可以把这个命令理解为:上一次 kubeadm init 初始化集群操作失败了,该命令清理了之前的失败环境。
kubeadm reset
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.14.2
初始化成功.jpg
master节点初始化成功!

15.配置kubectl

就是执行初始化成功后输出的那三条命令

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

查看节点信息 kubectl get nodes
此时只能看到master节点,等待其他节点加入进来后即可看到。

16.让集群ready(待另一台node节点加入集群后操作)

在master上执行kubectl get nodes可以看到,最开始看到的是NotReady,原因是pod都是分布在不同的主机上,各个Pod之间无法通信,需要安装CNI网络插件,它才会变成ready,这里选择calico网络。

步骤1:在master上下载配置calico网络的yaml。
wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml --no-check-certificate

步骤2:修改calico.yaml里的pod网段。

把calico.yaml里pod所在网段改成kubeadm init时选项--pod-network-cidr所指定的网段,
直接用vim编辑打开此文件查找192,按如下标记进行修改:
# no effect. This should fall within `--cluster-cidr`.
# - name: CALICO_IPV4POOL_CIDR
#   value: "192.168.0.0/16"
# Disable file logging so `kubectl logs` works.
- name: CALICO_DISABLE_FILE_LOGGING
value: "true"

把两个‘#’及‘#’后面的空格去掉,并把192.168.0.0/16改成10.244.0.0/16

# no effect. This should fall within `--cluster-cidr`.
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
# Disable file logging so `kubectl logs` works.
- name: CALICO_DISABLE_FILE_LOGGING
value: "true"

步骤3:提前下载所需要的镜像。
查看此文件用哪些镜像:grep image calico.yaml
在所有节点(包括master)上把这些镜像下载下来:
for i in calico/cni:v3.14.0 calico/pod2daemon-flexvol:v3.14.0 calico/node:v3.14.0 calico/kube-controllers:v3.14.0 ; do docker pull $i ; done

步骤4:安装calico网络。
kubectl apply -f calico.yaml
安装calico网络.jpg

步骤5:验证结果。
再次在master上运行命令 kubectl get nodes查看运行结果:
可以看到所有节点的状态已经变为是Ready了。

17.测试k8s集群

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
1657005037094.jpg

node节点配置

重复master节点1-13的步骤

将另一台noed节点加入集群

kubeadm join 192.168.152.129:6443 --token yz6m6c.te0cb34ip38ib5gd \
    --discovery-token-ca-cert-hash sha256:2fb7080429518e03d9262ab01f20d9b8470f047474b32bd6224ca6e123e49156

可能遇到的错误
node报错.jpg
同master13遇到的问题,下载安装1.14.2版本即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 知识点整理

JavaScript 知识点整理 学习课程参考&#xff1a;Java程序员用学前端么&#xff1f;java开发所需的前端技术全教程&#xff08;HTML/CSS/js/vue2/vue3/react&#xff09;bilibili 什么是 ES6 &#xff1f; 根据维基百科解释 ECMAScript 规范是由 Netscape 的 Brendan Eich 开发…

[S-Clustr]利用环形网络高匿名性控制骇客设备

地址 https://github.com/MartinxMax/S-Clustr_Ring_Network_Test_V1.2 当前软件处于待测试运行阶段,遇到bug及时反馈 影子集群 S-Clustr_Root_Server 收集显示设备状态的根服务器&#xff0c;部署在A服务器上UDP端口10091用于收集核心控制服务器的设备状态开放TCP端口1009…

pdf文件属性的删除

pdf文件属性的删除 投标过程中需要处理文件属性&#xff0c;特别是word文件属性以及pdf文件的处理 这里讲解pdf文件属性的处理 word处理在我的另外一个博客中&#xff0c;word文件属性的处理 https://ht666666.blog.csdn.net/article/details/134102504 一般用 adobe acroba…

Spring Boot Actuator介绍

大家在yaml中经常见到的这个配置 management: endpoints: web: exposure: #该配置线上需要去掉&#xff0c;会有未授权访问漏洞 include: "*" 他就是Actuator&#xff01; 一、什么是 Actuator Spring Boot Actuator 模块提供了生产级别…

力扣题目训练(20)

2024年2月13日力扣题目训练 2024年2月13日力扣题目训练594. 最长和谐子序列598. 区间加法 II599. 两个列表的最小索引总和284. 窥视迭代器287. 寻找重复数135. 分发糖果 2024年2月13日力扣题目训练 2024年2月13日第二十天编程训练&#xff0c;今天主要是进行一些题训练&#x…

stm32-编码器测速

一、编码器简介 编码电机 旋转编码器 A,B相分别接通道一和二的引脚&#xff0c;VCC&#xff0c;GND接单片机VCC&#xff0c;GND 二、正交编码器工作原理 以前的代码是通过触发外部中断&#xff0c;然后在中断函数里手动进行计次。使用编码器接口的好处就是节约软件资源。对于频…

老电脑装什么系统流畅

对于一些老旧电脑来说&#xff0c;重装系统是提升电脑性能的最佳选择。那么&#xff0c;老电脑装什么系统流畅呢&#xff1f;推荐Windows 7系统&#xff0c;它对硬件的需求相对较低。配置较低的电脑运行Windows 7可以更好地利用系统资源&#xff0c;提高电脑的运行速度和响应能…

javaweb-maven+HTTP协议+Tomcat+SpringBoot入门+请求+响应+分层解耦

Maven IDEA集成Maven 依赖管理 依赖配置 maven是插件完成对应的工作的~ 哇哇哇maven看完啦~~~~~~ Spring.io Springboot是Spring家族的子项目&#xff0c;可以帮助我们非常快速地构建应用程序&#xff0c;简化开发&#xff0c;提高效率。 RestController请…

因聚而生 数智有为丨软通动力携子公司鸿湖万联亮相华为中国合作伙伴大会2024

3月14日&#xff0c;以“因聚而生 数智有为”为主题的“华为中国合作伙伴大会2024”在深圳隆重开幕。作为华为的重要合作伙伴和本次大会钻石级&#xff08;最高级&#xff09;合作伙伴&#xff0c;软通动力深度参与本次盛会&#xff0c;携前沿数智化技术成果和与华为的联合解决…

DVWA靶场-CSRF跨站请求伪造

CSRF(跨站请求伪造)简介概念 CSRF&#xff08;Cross—site request forgery&#xff09;&#xff0c;跨站请求伪造&#xff0c;是指利用受害者未失效的身份认证信息&#xff08;cookie&#xff0c;会话等&#xff09;&#xff0c;诱骗其点击恶意链接或者访问包含攻击代码的页面…

AJAX学习(四)

版权声明 本文章来源于B站上的某马课程&#xff0c;由本人整理&#xff0c;仅供学习交流使用。如涉及侵权问题&#xff0c;请立即与本人联系&#xff0c;本人将积极配合删除相关内容。感谢理解和支持&#xff0c;本人致力于维护原创作品的权益&#xff0c;共同营造一个尊重知识…

国产Copilot--通义灵码安装教程

文章目录 在 Visual Studio Code 中安装通义灵码步骤1步骤2步骤3步骤4 参考 在 Visual Studio Code 中安装通义灵码 通义灵码&#xff0c;是一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解…

Xcode调试Qt 源码

在Mac下使用Xcode 开发Qt程序&#xff0c;由于程序断点或者崩溃后&#xff0c;Qt库的堆栈并不能够正确定位到源码的cpp文件&#xff0c;而是显示的是汇编代码&#xff0c;导致不直观的显示。 加载的其他三方库都是同理。 所以找了攻略和研究后&#xff0c;写的这篇文章。 一&a…

Java_12 杨辉三角 II

杨辉三角 II 给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1] 示例 2: 输入: rowIndex 0 输出: [1] 示例 3: 输入: rowIndex 1 输…

供电系统分类详解

一、供电系统分类 电力供电系统一般有5种供电模式&#xff0c;常用的有&#xff1a;IT系统&#xff0c;TT系统&#xff0c;TN系统&#xff0c;其中TN系统又可以分为TN-C&#xff0c;TN-S&#xff0c;TN-C-S。 1、TN-C系统&#xff08;三相四线制&#xff09; 优点: 该系统中…

193基于matlab的基于两轮驱动机器人的自适应轨迹跟踪算法

基于matlab的基于两轮驱动机器人的自适应轨迹跟踪算法&#xff0c;将被跟踪轨迹分段作为跟踪直线处理&#xff0c;相邻离散点之间为一段新的被跟踪轨迹。程序已调通&#xff0c;可直接运行。 193 自适应轨迹跟踪算法 两轮驱动机器人 - 小红书 (xiaohongshu.com)

传输层_TCPUDP

应用层中调用write/sendrecv/read这些系统接口&#xff0c;并没有将数据发送到网络中&#xff0c;而是向下交付到传输层协议&#xff0c;具体什么时候发送数据&#xff0c;由传输层根据一些策略进行数据的实际发送。传输层的主要功能就是负责数据的传输&#xff0c;包括如果数据…

【学习】PyTorch中的nn.Embedding的用法

基本理解 nn.Embedding(num_embeddings, embedding_dim)其中 num_embeddings 是词表的大小&#xff0c;即 len(vocab)&#xff1b;embedding_dim 是词向量的维度。 nn.Embedding()产生一个权重矩阵weight&#xff0c;其shape为&#xff08;num_embeddings, embedding_dim&…

Java代码审计安全篇-反序列化漏洞

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全java代码审计和部分师傅审计思路以及webgoat靶场&#xff0c;记录…

Go-知识select

Go-知识select 1. select 的特性1.1 chan读写1.2 返回值1.3 default 2. select 经典使用2.1 永久阻塞2.2 快速检错2.3 限时等待 3. 实现原理3.1 数据结构3.2 实现逻辑3.3 原理总结 4. 总结4.1 大概原理4.2 参数4.3 返回值 一个小活动&#xff1a; https://developer.aliyun.com…