k8s集群安装(kubeadm)

k8s集群安装(kubeadm)

  • 1、环境准备(master和node节点都执行)
    • 1.1、替换yum源
    • 1.2、关闭selinux
    • 1.3、永久关闭防火墙
    • 1.4、永久关闭swap
    • 1.5、修改主机名添加host
    • 1.6、时间同步
    • 1.7、将桥接的IPv4流量传递到iptables的链
    • 1.8、docker安装
    • 1.9、设置k8s yum源
    • 2.0、安装kubelet,kubeadm,kubectl
  • 2、master节点(master节点执行)
  • 3、加入node节点(具体在哪个节点执行,下面备注有)
  • 4、创建nginx当测试
  • 5、在任意节点使用kubectl

1、环境准备(master和node节点都执行)

这是一个新建的虚拟机环境,需要做以下操作。linux是centos7.6

1.1、替换yum源

把默认的yum源更换成淘宝的yum源

#删除之前的仓库地址
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
#查看平台yum仓库
yum repolist

在这里插入图片描述

#下载淘宝的repo镜像仓库地址
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

如果你修改了 任何 repo 文件,记得清除 YUM 的缓存并重新构建缓存

sudo yum clean all && sudo yum makecache
#或者执行
yum clean all && yum makecache && yum repolist

1.2、关闭selinux

#查看selinux状态
sestatus 

永久关闭selinux,修改配置文件/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,使用重启命令sudo reboot 配置生效‌

vi /etc/selinux/config

临时关闭SELinux‌,但此方法在重启后会是失效。

sudo setenforce 0

1.3、永久关闭防火墙

#查看防火墙状态
sudo systemctl status firewalld
#停止firewalld服务 && #禁止firewalld服务在系统启动时自动启动
sudo systemctl stop firewalld && sudo systemctl disable firewalld 

1.4、永久关闭swap

查看是否关闭swap, 如下,执行free -h 如果Swap行不为0,说明swap是开着的,为0是关着的。

[root@bogon ~]# free -htotal        used        free      shared  buff/cache   available
Mem:           1.8G        126M        1.5G        9.5M        161M        1.5G
Swap:          2.0G          0B        2.0G

永久关闭swap:
编辑 /etc/fstab文件,找到带有swap行,然后注释该行,重启机器后生效。

vi /etc/fstab

在这里插入图片描述
临时关闭swap,重启失效:

swapoff -a  

1.5、修改主机名添加host

#查看主机的hostname
hostname
#修改hostname为k8s-master1
sudo hostnamectl set-hostname k8s-master1

添加host, 记得后面把node节点的host也配置上。

vi /etc/hosts192.168.8.132   k8s-master1
192.168.8.133   k8s-node1

1.6、时间同步

sudo yum -y install ntpdate

1.7、将桥接的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
EOF

1.8、docker安装

配置docker的yum源

yum install wget -y 
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -P /etc/yum.repos.d/
#清空yum缓存
yum clean all && yum makecache && yum repolist
#查看docker可以安装的版本
yum list docker-ce --showduplicates | sort -
#安装docker
yum install docker-ce-23.0.6 -y
# 启动docker	
systemctl start docker
# 开机自启	
systemctl enable docker	
# 查看启动状态
systemctl status docker	
#查看版本
docker -v
#重启
systemctl daemon-reload && systemctl restart docker

配置docker国内仓库地址
顺便加上"exec-opts": [“native.cgroupdriver=systemd”],防止后面搭建k8s集群报错

vi /etc/docker/daemon.json{"registry-mirrors": ["https://docker.m.daocloud.io","https://noohub.ru","https://huecker.io","https://dockerhub.timeweb.cloud","https://docker.rainbond.cc"],"exec-opts": ["native.cgroupdriver=systemd"]
}

1.9、设置k8s yum源

cat <<EOF > /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/kubernetes/yum/doc/rpm-package-key.gpg
EOF#更新缓存
yum clean all && yum makecache && yum repolist

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 Kubernetes源设为阿里
gpgcheck=0:表示对从这个源下载的rpm包不进行校验
repo_gpgcheck=0:某些安全性配置文件会在 /etc/yum.conf 内全面启用 repo_gpgcheck,以便能检验软件库的中继数据的加密签署
如果gpgcheck设为1,会进行校验,就会报错如下,所以这里设为0

2.0、安装kubelet,kubeadm,kubectl

yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet

2、master节点(master节点执行)

#查看k8s版本
kubeadm version
#查看初始化需要哪些镜像
kubeadm config images list
#查看kubelet状态
systemctl status kubelet

可以先通过kubeadm config images pull手动在各个节点上拉取所k8s需要的docker镜像,master节点初始化或者node节点加入集群时,会用到这些镜像

如果不先执行kubeadm config images pull拉取镜像,其实在master节点执行kubeadm init 或者node节点执行 kubeadm join命令时,也会先拉取镜像。
本人没有提前拉取镜像,都是在master节点kubeadm init 和node节点 kubeadm join时,自动拉的镜像。

注意 : apiserver-advertise-address指的是master的主机IP

kubeadm init --kubernetes-version=v1.23.6 \
--apiserver-advertise-address=192.168.8.132 \
--image-repository=registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

初始化遇到错误,排查错误。
在这里插入图片描述
用命令journalctl -xefu kubelet查看错误日志

journalctl -xefu kubelet

在这里插入图片描述
上面错误是因为kubelet的cgroup和docker的不一致所导致的,“kubelet cgroup驱动为systemd,而docker的为cgroupfs”,解决方式修改docker的cgroup为systemd。(环境准备时已经加上了)

{"registry-mirrors": ["https://docker.m.daocloud.io","https://noohub.ru","https://huecker.io","https://dockerhub.timeweb.cloud","https://docker.rainbond.cc"],"exec-opts": ["native.cgroupdriver=systemd"]
}

然后重启kubelet

systemctl restart kubelet
systemctl status kubelet
journalctl -xefu kubelet

再次查看,发现报没认证信息,不用管,
在这里插入图片描述
重新重置下,重新init

kubeadm resetkubeadm init --kubernetes-version=v1.23.6 \
--apiserver-advertise-address=192.168.8.132 \
--image-repository=registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

在这里插入图片描述
执行下面三条命令。

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

3、加入node节点(具体在哪个节点执行,下面备注有)

查看token,node加入集群需要该token。
TTL表示token过期时间,如果过期了,使用create重新创建下token就行。
(master节点执行)

#如果查不出来,表示token过期,需要重新创建。
kubeadm token list
#重新创建token
kubeadm token create
[root@k8s-master1 ~] kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
u3ht6s.l91gbx6rkqrkkktj   23h         2024-11-10T08:04:30Z   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token

用openssl生成sha值
(master节点执行)

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

生成hash 格式:f0e9a247c9382fd88327335d616725d59f37f02941676ff029c413611f8112df

(node节点执行)
加入集群命令(在node节点执行)
记得hash 后需要手动加上sha256

kubeadm join 192.168.8.132:6443 --token y2fexv.1wtmar0g1kg42yyw \--discovery-token-ca-cert-hash sha256:f0e9a247c9382fd88327335d616725d59f37f02941676ff029c413611f8112df

查看k8s各个节点状态,发现节点都是nodeready状态,各个组件状态正常。

(master节点执行)

#查看节点状态
kubectl get node
#查看各个组件状态,比如etcd,scheduler,controller-manager
kubectl get cs
#查看各个pod状态,发现crons没起来,可能是因为网络插件还没装.
kubectl get pod -n kube-system

安装网络插件
(master节点执行)

curl https://docs.projectcalico.org/manifests/calico.yaml -O#修改calico.yaml中的CALICO_IPV4POOL_CIDR(默认是注释的),注意要配置为k8s集群的pod网段。#查看网络需要下载的镜像
grep image calico.yaml
#修改网络下载镜像的默认地址为空,则默认使用docker的仓库地址
sed -i 's#docker.io/##g' calico.yaml

启动网络插件:
(master节点执行)

kubectl apply -f calico.yaml

然后继续查看网络的pod是否起来了
(master节点执行)

kubectl get pod -n kube-system

如果pod一直起不来,则使用describe 命令查看日志状态。
(master节点执行)

kubectl describe pod pod名称 -n kube-system

如果报错日志是镜像拉不下来,则手动去master和node节点都拉下镜像
(master和node节点执行)

docker pull calico/kube-controllers:v3.25.0
docker pullcalico/cni:v3.25.0
docker pullcalico/node:v3.25.0

然后发现网络插件都启动正常,节点也都是ready状态,此时就搭建集群成功了,如果需要加入其他node节点,重复上面操作即可。

4、创建nginx当测试

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort

查看放开的端口:

[root@k8s-master1 opt]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        28h
nginx        NodePort    10.102.104.249   <none>        80:30940/TCP   6m10s

通master或者node节点的ip+端口访问即可:

http://192.168.8.132:30940/
http://192.168.8.133:30940/

5、在任意节点使用kubectl

master节点执行,拷贝到需要kubectl命令的节点

scp /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes

对应的node节点执行

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

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

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

相关文章

Ubuntu 修改时区 同步时间

Ubuntu 修改时区 同步时间 1、设置系统时区为中国上海2、更新软件包列表3、安装 ntpdate 工具4、从阿里云 NTP 服务器同步时间5、将系统时间同步到硬件时钟6、读取硬件时钟时间 1、设置系统时区为中国上海 timedatectl set-timezone Asia/Shanghai2、更新软件包列表 apt upda…

什么是JVM实现

JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;实现是指将JVM规范转化为具体可执行代码的过程和结果。JVM规范定义了Java虚拟机应该具备的功能、行为以及与其他组件的交互方式&#xff0c;但它本身并不包含具体的实现代码。因此&#xff0c;不同的组织…

【日常问题排查小技巧-连载】

线上服务CPU飙高排查 先执行 top&#xff0c;找到CPU占用比较高的进程 id&#xff0c;&#xff08;比如 21448&#xff09; jstack 进程 id > show.txt&#xff08;jstack 21448 > show.txt&#xff09; 找到进程中CPU占用比较高的线程&#xff0c;线程 id 转换为 16 进…

您与此网站之间建立的连接不安全解决方法

如果你打开网站&#xff0c;地址栏有警告&#xff0c;点进去是这样的提示&#xff1a;您与此网站之间建立的连接不安全&#xff0c;了解详细信息。 请勿在此网站上输入任何敏感信息&#xff08;例如密码或信用卡信息&#xff09;&#xff0c;因为攻击者可能会盗取这些信息。 …

【与AI+】学习SAP开发有什么渠道可以推荐

前言&#xff1a;好的&#xff0c;我又将开辟一个新的专栏&#xff0c;这个专栏呢&#xff0c;就准备放一些我向AI提问的问题&#xff0c;以及AI的回答。因为感觉真的好方便哈哈哈~ 我不是很确定我的专栏文章内容是否涉及版权&#xff0c;以及也不确定这些整合过的文字是否涉嫌…

江苏博才众创科技产业园集团拟投资10亿元在泰兴打造汽车零部件产业园

2024年11月7日&#xff0c;泰兴市高新技术产业开发区与江苏博才众创科技产业园集团举行新能源汽车零部件智能制造产业园项目签约仪式。 泰兴市高新区党工委委员、管理办副主任王峰表示&#xff1a;高新区是全市项目建设的主阵地&#xff0c;近年来聚焦高端化、智能化、绿色化&a…

Flutter 的 Widget 概述与常用 Widgets 与鸿蒙 Next 的对比

一、Flutter 的 Widget 概述 Flutter 是 Google 开发的一款开源 UI 框架&#xff0c;旨在帮助开发者快速构建高性能、高保真度的移动、Web 和桌面应用程序。在 Flutter 中&#xff0c;UI 的构建完全是通过 Widget 来实现的。Widget 是 Flutter 中所有用户界面元素的基础构建块…

【python】Flask

文章目录 1、Flask 介绍2、Flask 实现网页版美颜效果3、参考 1、Flask 介绍 Flask 是一个用 Python 编写的轻量级 Web 应用框架。它设计简单且易于扩展&#xff0c;非常适合小型项目到大型应用的开发。 以下是一些 Flask 库中常用的函数和组件&#xff1a; 一、Flask 应用对…

FastAPI —— 请求参数验证

1.hello world 给后端船数据 hello world 接口给后端传 COVID-19 感染数据_高性能 FastAPI 框架入门精讲-慕课网 #!/usr/bin/python3 # -*- coding:utf-8 -*- # __author__ __Jack__from typing import Optionalfrom fastapi import FastAPI from pydantic import BaseModel…

产品经理如何使用项目管理软件推进复杂项目按时上线

前言 相信很多产品同学或多或少都有过这样的经历&#xff1a;平时没有听到任何项目延期风险&#xff0c;但到了计划时间却迟迟无法提测……评审时没有任何argue&#xff0c;提测后发现开发的功能不是自己想要的……费劲九牛二虎之力终于让项目上线了&#xff0c;然而发现成果达…

新系统如何进行模型环境配置

在机器学习和深度学习中&#xff0c;一个良好的开发环境能够显著提高工作效率。本篇博客将详细介绍如何在新的Linux系统&#xff08;以Ubuntu为例&#xff09;上进行模型环境的配置&#xff0c;包括基础系统设置、Python虚拟环境搭建、常用库的安装以及GPU驱动和CUDA的安装等。…

机器视觉:轮廓匹配算法原理

轮廓匹配的模板变量主要包括模板图像&#xff08;Template&#xff09;和待检测图像&#xff08;Source Image&#xff09; 在轮廓匹配中&#xff0c;模板变量主要包括一下几个关键部分&#xff1a; ‌模板图像&#xff08;Template&#xff09;‌&#xff1a;这是进行匹配的…

OpenAI大事记;GPT到ChatGPT参数量进化

目录 OpenAI大事记 GPT到ChatGPT参数量进化 OpenAI大事记 GPT到ChatGPT参数量进化 ChatGPT是从初代 GPT逐渐演变而来的。在进化的过程中,GPT系列模型的参数数量呈指数级增长,从初代GPT的1.17亿个参数,到GPT-2的15 亿个参数,再到 GPT-3的1750 亿个参数。模型越来越大,训练…

STM32移植RT-Thread---时钟管理

一RTT时钟节拍概念 RT-Thread的时钟节拍&#xff08;Tick&#xff09;是操作系统用于管理时间和任务调度的一个基本单位。它在实时操作系统中尤为关键&#xff0c;用于实现任务的延时、超时管理等功能。以下是关于RT-Thread时钟节拍的简单说明&#xff1a; 1.Tick定义&#x…

Am I Isolated:一款安全态势基准测试工具

基于Rust的容器运行时扫描器作为一个容器运行&#xff0c;检测用户容器运行时隔离中的漏洞。 它还提供指导&#xff0c;帮助用户改善运行时环境&#xff0c;以提供更强的隔离保证。 容器的现状是它们并不包含&#xff08;隔离&#xff09;。 容器隔离的缺失在云原生环境中有…

SQLite的BLOB数据类型与C++二进制存储学习记录

一、BLOB数据类型简介 Blob&#xff08;Binary Large Object&#xff09;是一种用于存储二进制数据的数据类型&#xff0c;在数据库中常用于存储图片、音频和视频等大型&#xff08;大数据量&#xff09;的二进制数据[1-2]。需要注意的是&#xff0c;SQLite中BLOB类型的单对象最…

编写一个基于React的聊天室

前言 此前已经编写了一版后端的im&#xff0c;此次就用其作为服务端&#xff0c;可查看参考资料1 代码 使用WebStorm创建React项目 安装依赖包 PS C:\learn-demo\front\chatroom> npm installadded 183 packages, and audited 184 packages in 16s43 packages are looki…

Javascript事件循环流程分析

基础概念 事件循环&#xff08;Event Loop&#xff09;&#xff1a;事件循环是JavaScript运行时环境中的一个循环机制&#xff0c;它不断地检查调栈用和任务队列。当调用栈为空时&#xff0c;事件循环会首先检查微任务队列&#xff0c;并执行其中的所有任务。只有当微任务队列…

解决使用Golang的email库发送qq邮件报错short response,错误类型为textproto.ProtocolError

问题阐述 使用email库发送QQ邮件&#xff0c;采用587端口&#xff1a; package mainimport ("fmt""net/smtp""github.com/jordan-wright/email" )func SendEmail(sendTo string, subject string, body string) (err error) {e : email.NewEmai…

ENAS和DARTs的比较

ENAS&#xff08;Efficient Neural Architecture Search&#xff09;和DARTS&#xff08;Differentiable Architecture Search&#xff09;都是神经架构搜索&#xff08;NAS&#xff09;的有效方法&#xff0c;目标是自动化地找到高性能的神经网络结构。尽管它们都旨在解决NAS的…