kubeadm创建k8s集群

news2024/9/20 0:51:31

kubeadm来快速的搭建一个k8s集群:
二进制搭建适合大集群,50台以上。
kubeadm更适合中下企业的业务集群。

部署框架

master192.168.10.10dockerkubelet kubeadm kubectl flannel
node1192.168.10.20dockerkubelet kubeadm kubectl flannel
node2192.168.10.30dockerkubelet kubeadm kubectl flannel
harbor192.168.10.40docker-compose hargordocker

实验部署

在master node1 node2上都操作

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a
#交换分区必须要关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
#加载 ip_vs 模块

//修改主机名

hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

//所有节点修改hosts文件

vim /etc/hosts
192.168.10.10 master01
192.168.10.20 node01
192.168.10.30 node02

//调整内核参数

vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1

//生效参数

sysctl --system

所有节点安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io

mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://pkm63jfy.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service 
docker info | grep "Cgroup Driver"
Cgroup Driver: systemd

所有节点安装kubeadm,kubelet和kubectl  
//定义kubernetes源

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
 
yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15
 
//开机自启kubelet
systemctl enable kubelet.service

//查看初始化需要的镜像

kubeadm config images list --kubernetes-version 1.20.15

在master上

kubeadm init \
--apiserver-advertise-address=192.168.10.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.20.15 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl=0

node节点上的操作

在master上

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

systemctl restart kubelet

初始化后需要修改 kube-proxy 的 configmap,开启 ipvs

kubectl edit cm kube-proxy -n=kube-system
修改mode: ipvs

kubectl get cs 发现集群不健康,更改以下两个文件

kubectl get cs

kubectl get cs 发现集群不健康,更改以下两个文件

vim /etc/kubernetes/manifests/kube-scheduler.yaml

修改以下内容

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

修改以下内容

systemctl restart kubelet
kubectl get cs

kubectl get nodes

上传文件

node节点flannel.tar、cni-plugins-linux-amd64-v0.8.6.tgz
master节点kube-flannel.yml 

master做node节点时,可以上传flannel.tar、cni-plugins-linux-amd64-v0.8.6.tgz

所有node节点

cd /opt
docker load -i flannel.tar
mv /opt/cni /opt/cni_bak
mkdir -p /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin

在 master 节点

kubectl apply -f kube-flannel.yml 
kubectl get node

#证书有效期的问题,kubeadm默认只有1年:

openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text | grep Not
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not

在master的/opt/上传 update-kubeadm-cert.sh 

chmod 777 update-kubeadm-cert.sh
./update-kubeadm-cert.sh all
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not

//在master节点查看节点状态

kubectl get pods -n kube-system

//测试 pod 资源创建
kubectl create deployment nginx --image=nginx
kubectl get pods -o wide

//暴露端口提供服务
kubectl expose deployment nginx --port=80 --type=NodePort

进入pod修改页面
kubectl get svc

//测试访问
curl http://node01:31950

//缩容副本

kubectl scale deployment nginx --replicas=3
kubectl get pods -o wide

vim /etc/profile
source <(kubectl completion bash)


source /etc/profile

部署docker----harbor

/上传 harbor-offline-installer-v2.8.1.tgz 和 docker-compose 文件到 /opt 目录
cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
 
tar zxvf harbor-offline-installer-v2.8.1.tgz
cd harbor/
vim harbor.yml
hostname = hub.test.com
   https:
     # https port for harbor, default is 443
  port: 443
     # The path of cert and key files for nginx
     certificate: /data/cert/server.crt
     private_key: /data/cert/server.key

harbor_admin_password = 123456
 
 
//生成证书
mkdir -p /data/cert
cd /data/cert
#生成私钥
openssl genrsa -des3 -out server.key 2048
输入两遍密码:123456

openssl genrsa: 用于生成 RSA 密钥。
-des3: 使用 Triple DES 加密算法对生成的私钥进行加密。
-out server.key: 指定生成的私钥文件的名称为 server.key。
2048: 指定 RSA 密钥的位数为 2048 位。
 
#生成证书签名请求文件
openssl req -new -key server.key -out server.csr
输入私钥密码:123456
输入国家名:CN
输入省名:BJ
输入市名:BJ
输入组织名:TEST
输入机构名:TEST
输入域名:hub.kgc.com
输入管理员邮箱:admin@test.com
其它全部直接回车
 
#备份私钥
cp server.key server.key.old
 
#清除私钥密码
openssl rsa -in server.key.old -out server.key
输入私钥密码:123456
 
#签名证书
openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt
 
chmod +x /data/cert/*
 
cd /opt/harbor/
cd /opt/harbor/

./install.sh
 
在本地使用火狐浏览器访问:https://192.168.10.40
添加例外 -> 确认安全例外
用户名:admin
密码:123456

在所有node节点上

mkdir -p /etc/docker/certs.d/hub.test.com/

//在harbor节点把密钥验证目录整个转给node节点:
scp -r /data/ root@192.168.10.20:/
scp -r /data/ root@192.168.10.30:/

cd /data/cert/
cp server.crt  server.csr  server.key /etc/docker/certs.d/hub.test.com/

vim /lib/systemd/system/docker.service

systemctl daemon-reload
systemctl restart docker
docker login -u admin -p 123456 https://hub.test.com

docker tag nginx:latest hub.test.com/k8s/nginx:v1
docker push hub.test.com/k8s/nginx:v1

部署图形化dashboard

授权
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

kubectl apply -f recommended.yaml

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

此处访问的时node节点

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

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

相关文章

vue3 + TS + vite 搭建中后台管理系统(完整项目)

vue3 TS vite 搭建中后台管理系统&#xff08;完整项目&#xff09; 前言1、搭建步骤及方法2、集成多种插件功能&#xff0c;实现中后台按需使用3、新手学TS如何快速进入状态、定义TS类型4、layout搭建四款常见风格6、大屏搭建效果5、vue3Ts运营管理系统总结&#xff1a; 前言…

2020年认证杯SPSSPRO杯数学建模C题(第一阶段)抗击疫情,我们能做什么全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 C题 抗击疫情&#xff0c;我们能做什么 原题再现&#xff1a; 2020 年 3 月 12 日&#xff0c;世界卫生组织&#xff08;WHO&#xff09;宣布&#xff0c;席卷全球的冠状病毒引发的病毒性肺炎&#xff08;COVID-19&#xff09;是一种大流行病。…

Mybatis Plus 基础功能 BaseMapper和基础配置以及注解

文章目录 Mybatis Plus导入依赖定义Mapper约定常见配置 Mybatis Plus 导入依赖 官网看一下也行plus官网 spring boot3 版本<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><vers…

易点易动固定资产管理系统集成企业微信,帮助企业全生命周期管理固定资产

在现代企业中&#xff0c;固定资产管理是一项至关重要的任务。固定资产的高效管理可以提高企业的运营效率、降低成本&#xff0c;并确保资产的安全和稳定。然而&#xff0c;传统的固定资产管理方法往往复杂繁琐&#xff0c;容易出现信息不准确、流程不畅和数据不一致的问题。为…

Pikachu--字符型注入(get)

Pikachu--字符型注入&#xff08;get&#xff09; 提交方式是get提交&#xff0c;直接在浏览器地址栏里输入注入语句得出结果 判断注入类型 我们要输入数据库里面有的名字 比如vince 输入1 and 12 错误结果 输入 1 and 11 正确结果 判断为字符型注入 判断字段数 输…

一起玩儿物联网人工智能小车(ESP32)——24. 变量与函数(二)

摘要&#xff1a;本文介绍变量和函数的基本知识 在前面一篇中了解了变量&#xff0c;接着就来了解一下函数。函数是程序中的一个关键概念&#xff0c;它可以简化程序的编写&#xff0c;使代码更加模块化、可复用&#xff0c;提高程序的可读性。其实在之前已经多次遇到函数了&am…

python下载wheel并安装

一、查看当前python 版本兼容信息 pip debug --verbose C:\python\37>pip debug --verbose WARNING: This command is only meant for debugging. Do not use this with automation for parsing and getting these details, since the output and options of this command…

探索LinkedIn:使用TypeScript和jsdom库的高级内容下载器

概述 LinkedIn是一个专业的社交网络平台&#xff0c;拥有超过7亿的用户和数以亿计的职位、公司和教育机构的信息。对于数据分析师、市场营销人员、招聘人员和其他对LinkedIn数据感兴趣的人来说&#xff0c;能够从LinkedIn上获取和分析这些信息是非常有价值的。 因此&#xff0…

如何利用Oracle官方网站不登录账号下载和安装非最新版本的JDK(版本自由选择)

一、JDK概述 JDK&#xff08;Java Development Kit&#xff09;是Java开发工具集&#xff0c;是针对Java编程语言的软件开发环境。它包含了Java编译器、JRE&#xff08;Java运行时环境&#xff09;以及其他一些用于开发、调试和测试Java应用程序的工具&#xff0c;是Java开发人…

【日积月累】Java Lambda 表达式

目录 【日积月累】Java Lambda 表达式 1.前言2.语法3.应用场景3.1简化匿名内部类的编写3.1简化匿名内部类的编写3.2简化集合类中的操作3.3实现函数式接口3.4简化多个方法的调用3.5简化异步编程 4.总结5.参考 文章所属专区 日积月累 1.前言 Lambda表达式是一个匿名函数&#…

计算机毕业设计——SpringBoot 房屋销售租赁平台 房屋购物网站(附源码)

1&#xff0c;绪论 1.1 背景调研 在房地产行业持续火热的当今环境下&#xff0c;房地产行业和互联网行业协同发展&#xff0c;互相促进融合已经成为一种趋势和潮流。本项目实现了在线房产平台的功能&#xff0c;多种技术的灵活运用使得项目具备很好的用户体验感。 这个项目的…

微信小程序封装vant 下拉框select 单选组件

先上效果图&#xff1a; 主要是用vant 小程序组件封装的&#xff1a;vant 小程序ui网址&#xff1a;vant-weapp 主要代码如下: 先封装子组件&#xff1a; select-popup 放在 components 文件夹里面 select-popup.wxml: <!--pages/select-popup/select-popup.wxml--> &…

Flume基础知识(三):Flume 实战监控端口数据官方案例

1. 监控端口数据官方案例 1&#xff09;案例需求&#xff1a; 使用 Flume 监听一个端口&#xff0c;收集该端口数据&#xff0c;并打印到控制台。 2&#xff09;需求分析&#xff1a; 3&#xff09;实现步骤&#xff1a; &#xff08;1&#xff09;安装 netcat 工具 sudo yum …

RT-Thread学习

RT-Thread是以Apache License v2开源许可发布的物联网操作系统。 RT-Thread有十多年的历史&#xff0c;在开发过程中也放在Github上由大家协同开发&#xff0c;并发布一个个版本&#xff0c;导致不同人群面对多样的版本无从下手。 RT-Thread的版本/分支有以下几种可供选择&…

51单片机(STC8)-- GPIO输入输出

文章目录 I/O口相关寄存器端口数据寄存器端口模式配置寄存器&#xff08;PxM0&#xff0c;PxM1&#xff09;端口上拉电阻控制寄存器(PxPU)关于I/O的注意事项 配置I/O口I/O设置demoI/O端口模式LED控制&#xff08;I/O输出&#xff09;按键检测&#xff08;I/O输入&#xff09; S…

低代码搭建,助力批发零售行业解决方案的快速实现

引言 随着技术的快速发展&#xff0c;低代码技术作为一种高效的业务解决方案&#xff0c;正日益在批发零售行业中展现其巨大的应用潜力。其所带来的快速搭建、灵活性和成本效益&#xff0c;对于现代批发零售业务的管理和发展具有重要意义。 本文旨在探讨低代码技术在批发零售…

Groovy操作JSON和XML及对文件的处理

文章目录 1Groovy对Json的操作1.1 Groovy自带工具处理Json1.2 使用java第三方类库gson处理json 2 Groovy对xml的操作2.1 对象转换成xml2.2 xml转换成对象 3 Groovy操作文件3.1 文本文件操作3.2 对象写入文件和从文件中读出 1Groovy对Json的操作 1.1 Groovy自带工具处理Json ​…

跨年烟花-Html5实现_附完整源码【可直接运行】

文章目录 &#x1f37b;前言&#x1f538;目录结构⚫完整源码&#x1f535;源码分析&#x1f4ae;注意事项 &#x1f488;总结 &#x1f37b;前言 随着科技的进步和互联网的普及&#xff0c;人们对于跨年庆祝的方式也在不断变化。传统的烟花燃放虽然美丽&#xff0c;但存在环境…

气泵方案|车载充气泵的芯片和传感器

无线车载充气泵方案由一块PCBA板集成其所需的功能&#xff0c;其充气原理是发动机通过两根三角带驱动气泵曲轴&#xff0c;进而驱动活塞进行打气&#xff0c;打出的气体通过导气管导入储气筒。另一方面储气筒又通过一根导气管将储气筒内的气体导入固定在气泵上的调压阀内&#…

实战环境搭建-安装xshell和xftp

安装xshell和xftp的原因是想远程虚拟机&#xff0c;很多时候&#xff0c;直接去操作虚拟机明显不太方便。 所以&#xff0c;我们需要一个能够搭载虚拟机和本地电脑之间的桥梁&#xff0c;哪怕是你们去了企业&#xff0c;也和这个类似&#xff0c;唯一的区别是企业里面更多连接…