搭建k8s集群服务(kubeadm方式)

news/2024/10/4 0:20:36 标签: kubernetes, 容器, 云原生

准备工作

操作系统版本:CentOS Linux release 7.9.2009 (Core)

虚拟机硬件配置:2核8G内存(最低2G),硬盘最低25G;

linux内核版本(3.10版本尝试失败):5.4.268-1.el7.elrepo.x86_64

linux_升级LINUX内核步骤

docker版本:Docker version 25.0.1, build 29cf629

安装网络环境和其他环境设置

注意:将默认网络改为eth0网卡(我原来的是ens33改为了eth0)

Linux网卡没有eth0显示ens33原因以及解决办法

如果就3.10版本的linux内核,需要升级

  1. 关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

  1. 关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭

setenforce 0 #临时

  1. 关闭swap(要重启虚拟机)

sed 's/.swap./#&/' /etc/fstab #永久

swapoff -a #临时

  1. 根据规划设置主机名,以下3台主机

192.168.43.104 k8s-master

192.168.43.105 k8s-node1

192.168.43.106 k8s-node2

  1. 在master节点中添加

cat >> /etc/hosts

192.168.43.104 k8s-master

192.168.43.105 k8s-node1

192.168.43.106 k8s-node2

EOF

  1. 添加ipv4和ipv6桥接的配置(会自动创建k8s.conf文件)
    cat > /etc/sysctl.d/k8s.conf << EOF 
    net.bridge.bridge-nf-call-ip6tables = 1 
    net.bridge.bridge-nf-call-iptables = 1 
    EOF

        sysctl --system # 执行这条命令生效

  1. 时间同步

yum install ntpdate -y

ntpdate time.windows.com

安装docker环境

  1. 安装docker

先卸载

yum list installed | grep docker

yum remove docker-ce.x86_64 -y

rm -rf /etc/docker

rm -rf /var/lib/docker

rm -rf /usr/docker

rm -rf /run/docker

rm -rf /bin/docker

rm -rf /*/*/docker

查看有没有卸载干净

ll /*/docker

ll /*/*/docker

find / -name docker

再安装

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

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

yum install -y docker-ce docker-ce-cli containerd.io

  1. 配置镜像下载加速
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "registry-mirrors": ["https://7zi5cb9i.mirror.aliyuncs.com"]
    }
    EOF

systemctl daemon-reload

systemctl restart docker

systemctl enable docker

# 以下两项设置成yes:vim /etc/ssh/sshd_config

PermitRootLogin yes

PasswordAuthentication yes

安装kubeadmin、kubelet、kubectl

添加k8s镜像源

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

  1. 安装kubeadm kubelet kubectl (每个节点都要安装)

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

systemctl enable kubelet # 设置开机启动

systemctl start kubelet

# 查看状态,其它东西还没配置好,现在是启动不起来的

systemctl status kubelet

1.每个节点安装kubeadmin(快速构建集群环境的工具,主节点设置Master,从节点join到集群)
2.每个节点安装kubelet(真正干活的)
3.每个节点安装kubectl(命令行工具)
4.每个节点都要安装Docker(master和Node都要,容器运行时环境)

安装k8s master节点

  1. 安装k8s-master节点
  • 初始化master节点(仅在master上执行)
kubeadm init \
--apiserver-advertise-address=192.168.43.104 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16

如果执行init报错,再次执行之前要重置初始化: kubeadm reset -f

查看日志:tail -f /var/log/messages

journalctl -xeu kubelet

执行成功:

# 直接复制控制台上的几条命令执行

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 从节点加入集群中

kubeadm join 192.168.43.104:6443 --token 334rev.g1ubyahjflqnf9f0 \
--discovery-token-ca-cert-hash sha256:17130a159cf0b3f5b9836bf13d2e522c12ab89f92bb6ff150678d0d96e314095 

如果token过期了,用命令重新生成:kubeadm token create --ttl 0 --print-join-command

# 安装CNI网络插件Calico(主节点上安装)

  • 下载calico资源文件:wget https://docs.projectcalico.org/manifests/calico.yaml
  • 查看文件需要的镜像:

  • 可以看到默认是从docker.io下载的,速度太慢,需要替换docker.io

sed -i 's#docker.io/##g' calico.yaml

  • 修改calico.yaml配置文件(如果在master节点初始化指定了pod的ip(--pod-network-cidr=10.244.0.0/16),这步可以省略。)

  • 执行calico.yaml文件

  • 查看运行状态(耐心等待):kubectl get po -n kube-system

  • 查看节点状态:kubectl get nodes

  • 查看没有running的pod原因:kubectl describe po calico-node-7wrw7 -n kube-system

  • 等待结果,大概等了13分钟,状态全部变成running
  • 还可以使用watch命令监控状态:watch kubectl get pod -n kube-system -o wide

测试一下:

kubectl create deployment nginx --image=nginx

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

kubectl get pod,svc

在浏览器访问一下nginx(在任意节点下都能访问)

使用curl命令访问一下nginx

  1. 安装k8s-node1 / k8s-node2

在任意从节点上执行kubectl都会报错,原因是从节点执行命令需要链接主节点的api-server,但是从节点并不知道api-server的访问地址。

kubectl get nodes

所以,需要将做如下配置

  • 将master节点的 /etc/kubernetes/admin.conf 文件拷贝到两个从节点

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

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

  • 配置一个环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile

  • 刷新配置 source /etc/profile


http://www.niftyadmin.cn/n/5689172.html

相关文章

解决ModuleNotFoundError: No module named ‘torchcrf‘

运行深度学习程序时候&#xff0c;出现报错&#xff1a;ModuleNotFoundError: No module named torchcrf 将 from torchcrf import CRF 改为 from TorchCRF import CRF

【网络原理】Udp报文结构,保姆级详解,建议收藏

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 一、UDP报文格式 ​ ​ 可以看出UDP报文主要由报头和正文两部分构成&#xff0c;报头存储了此次报文的一些重要信息&#xff0c;而正文才是真正需要传输的内容。本篇文章就主要…

HR面试篇

一.面试中被问职业规划 HR感兴趣的不是你的职业规划,感兴趣的是你的职业规划和他们公司有没有关系。 或者说他们公司能不能去帮助你去实现你的职业规划。 切忌不要讲不合实际的,比如要在公司赚多少钱等等。 要根据公司的特点,找到切入点,只要讲得积极向上就可以。 二.…

网安学习(js漏洞挖掘)

内容来自bili白帽大法师白帽大法师的个人空间-白帽大法师个人主页-哔哩哔哩视频 (bilibili.com) 四种方式 目录 1、JS中存在插件名字&#xff0c;根据插件找到相应的漏洞直接利用 2、JS中存在一些URL链接&#xff0c;根据URL链接找到相应的页面进一步测试和利用 3、JS中存…

Swift并发笔记

1.同步和异步 说到线程的执行方式&#xff0c;最基本的一组概念是同步和异步。所谓同步&#xff0c;就是在操作执行完成之前&#xff0c;运行操作的这个线程都会被占用&#xff0c;直到函数最终被抛出或返回。Swift5.5之前&#xff0c;func关键字声明的所有的函数都是同步的。…

IP 数据包分包组包

为什么要分包 由于数据链路层MTU的限制,对于较⼤的IP数据包要进⾏分包. 什么是MTU MTU相当于发快递时对包裹尺⼨的限制.这个限制是不同的数据链路对应的物理层,产⽣的限制. • 以太⽹帧中的数据⻓度规定最⼩46字节,最⼤1500字节,ARP数据包的⻓度不够46字节,要在后⾯补填 充…

利用 notepad++ 初步净化 HaE Linkfinder 规则所提取的内容(仅留下接口行)

去掉接口的带参部分 \?.*去掉文件行 .*\.(docx|doc|xlsx|xls|txt|xml|html|pdf|ppt|pptx|odt|ods|odp|rtf|md|epub|css|scss|less|sass|styl|png|jpg|jpeg|gif|svg|ico|bmp|tiff|webp|heic|dds|raw|vue|js|ts|mp4|avi|mov|wmv|mkv|flv|webm|mp3|wav|aac|flac|ogg|m4a).*(\r\…

Python 课程23-LibROSA

前言 LibROSA 是一个用于音频分析的 Python 库&#xff0c;特别擅长音乐信号处理和音频特征提取。它提供了广泛的工具来处理音频文件&#xff0c;包括加载、变换、特征提取、可视化等功能。LibROSA 在音乐信息检索&#xff08;MIR&#xff09;、机器学习中的音频预处理和音频信…