k8s搭建

环境:

操作系统:win10

虚拟机:virtual box

linux发行版:CentOS7.9

linux内核(使用uname -r查看):3.10.0-957.el7.x86_64

master和node节点通信的ip(master): 10.0.0.198

0.检查配置

本次搭建的集群共三个节点,包含一个主节点,两个工作子节点:

节点 角色 IP

Node1 Master 10.0.0.198

Node2 Woker 10.0.0.199

Node3 Woker 10.0.0.200

根据官方推荐,节点可以是Ubuntu或CentOS操作系统,本次选择使用CentOS 7。节点最低配置如下:

硬件 配置

内存 >=2G

CPU >=2核

磁盘 >=15G

检查 centos / hostname

# 在 master 节点和 worker 节点都要执行

cat /etc/redhat-release

# 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字  

# 不能使用 localhost 作为节点的名字

hostname

# 请使用 lscpu 命令,核对 CPU 信息  

# Architecture: x86_64    本安装文档不支持 arm 架构  

# CPU(s):       2         CPU 内核数量不能低于 2

lscpu

虚拟机开通完成后, 为每个节点设置hosts及hostname

Master-1

Node1

修改 hosts:

master/node1/node2

cat <<EOF >>/etc/hosts

192.168.16.137 master-1

192.168.16.138 node1

192.168.16.139 node2

EOF

修改 hostname

如果您需要修改 hostname,可执行如下指令:

# 修改 hostname

hostnamectl set-hostname your-new-host-name

# 查看修改结果

# 设置 hostname 解析

echo "127.0.0.1   $(hostname)"  >>  /etc/hosts

master

hostnamectl set-hostname master-1

node1

hostnamectl set-hostname node1

node2

hostnamectl set-hostname node2

检查网络

kubelet使用的IP地址

ip route show 命令中,可以知道机器的默认网卡,通常是 eth0,如 default via 172.21.0.23 dev eth0

ip address 命令中,可显示默认网卡的 IP 地址,Kubernetes 将使用此 IP 地址与集群内的其他节点通信,如 172.17.216.80

所有节点上 Kubernetes 所使用的 IP 地址必须可以互通(无需 NAT 映射、无安全组或防火墙隔离)

1. 安装docker-ce 18.09.9(所有机器)

所有安装k8s的机器都需要安装docker,命令如下:

# 在 master 节点和 worker 节点都要执行

# 安装 docker

# 参考文档如下

# https://docs.docker.com/install/linux/docker-ce/centos/

# https://docs.docker.com/install/linux/linux-postinstall/

# 卸载旧版本-方式1

# yum如果报告没有安装这些软件包,那也没关系。

# 的内容/var/lib/docker/,包括图像、容器、卷和网络,都被保留。Docker 引擎包现在称为docker-ce.

yum remove -y docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-selinux \

docker-engine-selinux \

docker-engine

# 卸载旧版本-方式2

#查看已安装的docker:

yum list installed|grep docker

​#删除docker:

yum -y remove docker.x86_64 docker-client.x86_64 docker-common.x86_64

​# 删除已有镜像和容器(慎重,根据需要执行):

rm -rf  /var/lib/docker

# 安装docker所需的工具

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

# 配置阿里云的docker源

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

# 将服务器上的软件包信息 先在本地缓存,以提高搜索\安装软件的速度

yum makecache

# 指定安装这个版本的docker-ce

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

# 安装20.10.8版本

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

# 更新 cgroupdriver 为systemd

# 如果不修改,在添加 worker 节点时可能会碰到如下错误

# [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".

cat <<EOF >  /etc/docker/daemon.json

{

  "registry-mirrors": ["https://uy35zvn6.mirror.aliyuncs.com"],

  "exec-opts": ["native.cgroupdriver=systemd"]

}

EOF

# 启动docker

systemctl enable docker && systemctl start docker

# 验证docker 是否安装成功

docker version

# 检查 docker info|grep "Cgroup Driver" 是否输出 Cgroup Driver: systemd

[root@master-1 ~]# docker info|grep "Cgroup Driver"

 Cgroup Driver: systemd

 查看所有仓库中所有docker版本

yum list docker-ce --showduplicates | sort -r

 安装最新版本docker

yum install docker-ce

2. 设置k8s环境准备条件(所有机器)

安装k8s的机器需要2个CPU和2g内存以上,这个简单,在虚拟机里面配置一下就可以了。然后执行以下脚本做一些准备操作。所有安装k8s的机器都需要这一步操作。

# 关闭防火墙

systemctl disable firewalld

systemctl stop firewalld

# 关闭selinux

# 临时禁用selinux

setenforce 0

# 永久关闭 修改/etc/sysconfig/selinux文件设置

sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 禁用交换分区

swapoff -a

# 永久禁用,打开/etc/fstab注释掉swap那一行。

sed -i 's/.*swap.*/#&/' /etc/fstab

# 验证swap是否关闭

# free -h

# 若swap那一行输出为0,则说明已经关闭。

# 有时候也需要同时调整k8s的swappiness参数

# vi /etc/sysctl.d/k8s.conf

# 添加一行

vm.swappiness=0

# 执行下面的命令使得修改生效

# sysctl -p /etc/sysctl.d/k8s.conf

# 修改内核参数

cat <<EOF >  /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

# 手动加载所有的配置文件

sysctl --system

# 单独指定配置文件加载,执行:

# sysctl -p XXX.conf

3. 安装kubeadm、kubelet、kubectl(所有机器)

安装kubeadm、kubelet、kubectl

由于官方k8s源在google,国内无法访问,这里使用阿里云yum源

# 执行配置k8s的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

# 安装kubeadm、kubectl、kubelet 1.16.0

yum install -y kubectl-1.16.0-0 kubeadm-1.16.0-0 kubelet-1.16.0-0

# 安装kubeadm、kubectl、kubelet 1.22.2

# yum install -y kubectl-1.22.2 kubeadm-1.22.2 kubelet-1.22.2

​# 查看是否安装成功

kubelet --version

kubectl version

kubeadm version

# 重启 docker,并启动 kubelet

systemctl daemon-reload

systemctl restart docker

systemctl enable kubelet && systemctl start kubelet

4. 安装k8s v1.16.0 master管理节点

如果还没安装docker,请参照本文步骤二安装docker-ce 18.09.9(所有机器)安装。如果没设置k8s环境准备条件,请参照上面设置k8s环境准备条件(所有机器)执行。

以上步骤执行完毕之后,继续以下步骤。

# 下载管理节点中用到的6个docker镜像,你可以使用docker images查看到

# 这里需要大概两分钟等待,会卡在[preflight] You can also perform this action in beforehand using ''kubeadm config images pull

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0 --apiserver-advertise-address 192.168.16.137 --pod-network-cidr=10.244.0.0/16 --token-ttl 0

# 安装1.22.2版本

# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.22.2 --apiserver-advertise-address 192.168.172.128 --pod-network-cidr=10.244.0.0/16 --token-ttl 0

初始化k8s 以下这个命令开始安装k8s需要用到的docker镜像,因为无法访问到国外网站,所以这条命令使用的是国内的阿里云的源(registry.aliyuncs.com/google_containers)。

另一个非常重要的是:这里的--apiserver-advertise-address使用的是master和node间能互相ping通的ip,我这里是10.0.0.198,刚开始在这里被坑了一个晚上,你请自己修改下ip执行。这条命令执行时会卡在[preflight] You can also perform this action in beforehand using ''kubeadm config images pull,大概需要2分钟,请耐心等待。

上面安装完后,会提示你输入如下命令,复制粘贴过来,执行即可。

# 上面安装完成后,k8s会提示你输入如下命令,执行

mkdir -p $HOME/.kube

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

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

记住node加入集群的命令---- 上面kubeadm init执行成功后会返回给你node节点加入集群的命令,等会要在node节点上执行,需要保存下来

kubeadm join 192.168.16.137:6443 --token tof0b6.pt07wp1msmbvw23j \

    --discovery-token-ca-cert-hash sha256:6dbad3be7c334051ee7c4145b6006af9606ed5674c2b741173b983c40d5bfe20

如果忘记了,可以使用如下命令获取。

kubeadm token create --print-join-command

以上,安装master节点完毕。可以使用kubectl get nodes查看一下,此时master处于NotReady状态,需要安装网络插件。

安装网络插件

安装calico (master机器)

# 安装 calico 网络插件

# 参考文档 https://docs.projectcalico.org/v3.9/getting-started/kubernetes/

yum install wget

wget https://kuboard.cn/install-script/calico/calico-3.9.2.yaml

export POD_SUBNET=10.244.0.0/16

sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico-3.9.2.yaml

kubectl apply -f calico-3.9.2.yaml

安装flannel(master机器)

下载官方fannel配置文件 使用wget命令,地址为:https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml,这个地址国内访问不了,

可。

mkdir -p ~/k8s/

cd ~/k8s

curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f kube-flannel.yml

测试集群DNS是否可用

执行命令进入镜像

kubectl run curl --image=radial/busyboxplus:curl -it

如下所示表示正常

kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.If you don't see a command prompt, try pressing enter.

[ root@curl-6bf6db5c4f-hkd27:/ ]$

进入后执行以下命令确认解析正常

nslookup kubernetes.default

[ root@curl-69c656fd45-42gj9:/ ]$ nslookup kubernetes.def

ault

Server:    10.96.0.10

Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default

Address 1: 10.96.0.1 kubernetes.default.svc.cluster.loca

5. 安装k8s v1.16.0 node工作节点

如果还没安装docker,请参照本文步骤二安装docker-ce 18.09.9(所有机器)安装。如果没设置k8s环境准备条件,请参照本文步骤三设置k8s环境准备条件(所有机器)执行。

以上两个步骤检查完毕之后,继续以下步骤。

加入集群 这里加入集群的命令每个人都不一样,可以登录master节点,使用kubeadm token create --print-join-command 来获取。获取后执行如下。

kubeadm join 192.168.16.137:6443 --token tof0b6.pt07wp1msmbvw23j \

    --discovery-token-ca-cert-hash sha256:6dbad3be7c334051ee7c4145b6006af9606ed5674c2b741173b983c40d5bfe20

问题: The connection to the server localhost:8080 was refused

出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在kubeadm int启动集群的步骤中就生成了/etc/kubernetes/admin.conf。

因此,解决方法如下,将主节点中的/etc/kubernetes/admin.conf文件拷贝到工作节点相同目录下:

#复制admin.conf,请在主节点服务器上执行此命令

scp /etc/kubernetes/admin.conf 10.0.0.199:/etc/kubernetes/admin.conf

scp /etc/kubernetes/admin.conf 10.0.0.200:/etc/kubernetes/admin.conf

然后分别在工作节点上配置环境变量:

#设置kubeconfig文件

export KUBECONFIG=/etc/kubernetes/admin.conf

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

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

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

相关文章

deepspeed的并行模式介绍笔记

1.整体框架 2.并行模式 1.数据并行DDP 数据切分以后&#xff0c;分开单张卡训练得到参数&#xff0c;然后综合在单卡计算。 要点&#xff1a;前向计算和反向计算两步骤走并汇总。 1.前向计算 需要留一块主卡一定空间用于综合。 2.反向传播 利用前向传播的汇总参数得到各个…

Leetcode Java学习记录——动态规划基础

概念 首先想到递归、分治。动态规划本质也一样。 共性&#xff1a;找到重复子问题 差异性&#xff1a;有最优子结构&#xff0c;中途可以淘汰次优解。 动态规划是分治最优子结构。 例题 斐波那契数列 递归实现&#xff0c;时间复杂度是指数级。 最基础的写法为 int fib(i…

Linux CentOS java JDK17

1. 下载 cd /usr/local/ wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 2. 解压 tar -zxf jdk-17_linux-x64_bin.tar.gz 3.配置环境变量 vim /etc/profile // 在末尾处添加 export JAVA_HOME/usr/local/jdk-17.0.12 #你安装jdk的路径&…

idea和jdk的安装教程

1.JDK的安装 下载 进入官网&#xff0c;找到你需要的JDK版本 Java Downloads | Oracle 中国 我这里是windows的jdk17&#xff0c;选择以下 安装 点击下一步&#xff0c;安装完成 配置环境变量 打开查看高级系统设置 在系统变量中添加两个配置 一个变量名是 JAVA_HOME …

大模型日报|10 篇必读的大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.斯坦福推出大模型网络安全能力和风险评估框架 Cybench 用于网络安全的语言模型智能体&#xff08;agent&#xff09;能够自主识别漏洞并执行漏洞利用&#xff0c;有可能对现实世界造成影响。政策制定者、模型提供者…

vue通过iframe预览 pdf、word、xls、ppt、txt文件

vue通过iframe预览 pdf、word、xls、ppt、txt文件 iframe中预览只能直接打开pdf文件&#xff0c;其他文件需要通过office365预览。 效果&#xff1a; 组件代码&#xff1a; <!--* fileName: 文件预览-FileView.vue* date: yanghaoxing-2024-08-16 09:32:24 !--> <…

ModuleNotFoundError: No module named ‘pywin32_bootstrap

ModuleNotFoundError: No module named ‘pywin32_bootstrap 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社…

4.展示功能的测试及缓冲-《篮球比赛展示管理系统》现场管理员角色操作手册

本平台属于富客户端类型&#xff0c;展示元素包括精美图片、高级动画、透明视频等&#xff0c;所以为了保证画面的呈现速度&#xff0c;一定要在比赛之前&#xff0c;把所有的展示功能在电脑过一遍&#xff0c;浏览器自动产生一个数据缓冲&#xff0c;便于提高现场画面的展示放…

springboot的学习(三):开发相关

简介 一些开发测试时用到的技术。 springboot 热部署 修改了代码&#xff0c;服务器不需要重启可以直接看到新的修改的效果。仅仅加载当前开发者自定义开发的资源&#xff0c;不加载jar资源。 在pom.xml配置文件中添加&#xff1a; <dependency><groupId>org.s…

飞书操作—学习笔记

1&#xff1a;推荐飞书的理由 这几年越来越多的公司开始使用飞书这一款软件&#xff0c;即是是一些大厂&#xff0c;也开始边缘化内部的通讯交流软件。那么飞书有那些功能能得到这样的青睐喃&#xff1f; 我个人总结&#xff0c;飞书有如下优势 1&#xff1a;飞书功能相对来…

24年银行从业资格考试报名照规格要求

24年银行从业资格考试报名照规格要求 #银行从业 #银行从业资格证 #银行从业考试 #银行从业资格考试 #银行从业资格证报名照片 #银从

Linux | 深入探究Linux进程控制:从fork函数到进程等待再到进程替换

目录 1、进程的创建&#xff1a;fork函数 2、父子进程的奇怪现象&#xff1a;为什么同一个地址有不同的值&#xff1f;——区分内存的虚拟地址和物理地址 代码&#xff1a;利用fork函数的返回值进行父子进程分流&#xff0c;执行不同的代码块 虚拟地址和物理地址&#xff1…

推荐编译器插件:Fitten Code 更快更好的AI助手

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【Linux 驱动】IMX6ULL gpio驱动

1. 概述 如果 pinctrl子系统将一个 PIN 复用为 GPIO 的话&#xff0c;那么接下来要用到 gpio 子系统了。gpio 子系统顾名思义&#xff0c;就是用于初始化 GPIO 并且提供相应的 API 函数&#xff0c;比如设置 GPIO为输入输出&#xff0c;设置读取 GPIO 的值等。 gpio 子系统的主…

MAE论文详解

文章目录 前言一、MAE理论二、MAE整体框架三、MAE简单实现四、实验总结 前言 MAE是Facebook团队在2021年11月发布的一篇论文&#xff0c;《Masked Autoencoders Are Scalable Vision Learners》&#xff0c;带掩膜的自编码器是可扩展的视觉学习器&#xff0c;MAE就是Masked Aut…

SpringBoot整合Liquibase

1、是什么&#xff1f; Liquibase官网 Liquibase是一个开源的数据库管理工具&#xff0c;可以帮助开发人员管理和跟踪数据库变更。它可以与各种关系型数据库和NoSQL数据库一起使用&#xff0c;并提供多种数据库任务自动化功能&#xff0c;例如数据库迁移、版本控制和监控。Li…

文本分类任务算法演变(二)

文本分类任务算法演变 1.深度学习-pipeline1.1fastText1.2LSTM1.2.1公式详解1.2.2可视化 1.3TextCNN1.4Gated CNN1.5TextRCNN1.6Bert1.6.1取[cls] token对应的向量1.6.2将整句话的向量取max/average pooling1.6.3将Bert编码后的向量再输入LSTM或CNN1.6.4将Bert中间层的结果取出…

Python生成432Hz音频

使用 numpy 来生成信号&#xff0c; 使用 matplotlib 可视化信号&#xff0c; 使用 sounddevice 播放声音。 以下生成和播放 432 Hz 的正弦波信号&#xff1a; import numpy as np import sounddevice as sd import matplotlib.pyplot as plt# 生成单音函数 def generate_to…

gstreamer系列 -- 获取媒体信息

Basic tutorial 9: Media information gathering

windows下的redis7.0.11的下载

天&#xff0c;我找redis7.0.11的安装包就找了好久&#xff0c;终于给我找到了。市面上好多是linux版本的。 安装包&#xff1a;Release Redis 7.0.11 for Windows zkteco-home/redis-windows GitHub 解压之后是这样的。 然后你要测试能不能启动&#xff1a; 1、指定配置文…