云原生个人线路 K8s本地集群搭建(实操)

news2025/1/21 18:37:40

声明:此文章为博主个人学习记录,仅供学习和交流,如有侵权请联系博主。

kubernetes本地集群部署

三种方式

minikube 集群模拟器
裸机
kind

minikube

Docker客户端部署

在这里插入图片描述

裸机

环境

虚拟机 VMware

三台centos7
每台2g内存 2cpu 30g硬盘
k8s-master 192.168.60.120
k8s-node1 192.168.60.121
k8s-node2 192.168.60.122

以下没做说明,都是对三台机器同时操作

安装最新内核版本

#查看系统版本
cat /etc/redhat-release
#查看当前系统的内核:
uname -sr
#在 CentOS 7.x 上启用 ELRepo 仓库:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

#查看可用的系统内核相关包:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

#安装最新主线内核版本:
yum -y --enablerepo=elrepo-kernel install kernel-ml

#设置默认内核版本
vi /etc/default/grub
修改GRUB_DEFAULT=0

#重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

设置主机名

#命令:hostnamectl set-hostname <hostname>
#示例:
# 192.168.60.120(在主节点执行)
hostnamectl set-hostname k8s-master

# 192.168.60.121(在node1节点执行)
hostnamectl set-hostname k8s-node1

# 192.168.60.122(在node2节点执行)
hostnamectl set-hostname k8s-node2

#主机名解析
cat >> /etc/hosts << EOF
127.0.0.1   $(hostname)
192.168.60.120 k8s-master
192.168.60.121 k8s-node1
192.168.60.122 k8s-node2
EOF

时间同步

yum install ntpdate -y
ntpdate time.windows.com

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭selinux

#查看 selinux 是否开启
getenforce

#实验环境下选择永久关闭。
#1.永久关闭 SELinux ,需要重启机器生效:
sed -i 's/enforcing/disabled/' /etc/selinux/config
reboot
#2.临时关闭当前会话的 SELinux ,机器重启之后无效:
setenforce 0

关闭swap分区

#永久关闭 swap ,需要重启机器生效:
sed -ri 's/.*swap.*/#&/' /etc/fstab
reboot
#拓展:临时关闭当前会话的 swap ,机器重启之后无效:
swapoff -a

将桥接的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
vm.swappiness = 0
EOF

# 加载br_netfilter模块
modprobe br_netfilter

# 查看是否加载
lsmod | grep br_netfilter

# 使生效
sysctl --system

#拓展:持久化修改(保留配置包本地文件,重启系统或服务进程仍然有效)
sysctl -p

开启 ipvs

yum -y install ipset ipvsadm

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

# 授权、运行、检查是否加载:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
reboot

容器化环境和组件安装

参照上一篇Docker容器化

安装kubeadm、kubelet和kubectl

yum install -y kubelet-1.21.10 kubeadm-1.21.10 kubectl-1.21.10
kubelet --version

vi /etc/sysconfig/kubelet

# 修改为
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

systemctl enable kubelet

kubernetes集群部署

kubeadm config images list

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0

docker images

部署 Kubernetes 的 Master 节点

master机器

kubeadm init \
  --apiserver-advertise-address=192.168.60.120 \
  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version=v1.21.10 \
  --service-cidr=10.96.0.0/16 \
  --pod-network-cidr=10.244.0.0/16
  
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# 如果是 root 用户,还可以执行如下命令
export KUBECONFIG=/etc/kubernetes/admin.conf

#生成token,有效期2小时
kubeadm token create --print-join-command

# 生成一个永不过期的token 保留这个token
kubeadm token create --ttl 0 --print-join-command

# node加入集群
根据上面的命令,让node机器加入集群

部署网络插件

master机器

kubectl apply -f https://projectcalico.docs.tigera.io/v3.19/manifests/calico.yaml

#查看部署 CNI 网络插件进度
kubectl get pods -n kube-system 或者 watch kubectl get pods -n kube-system

设置 kube-proxy 的 ipvs 模式

master机器

kubectl edit cm kube-proxy -n kube-system

#####
找到ipvs模块,将 mode: " " 双引号里面加上ipvs
#####

#删除 kube-proxy ,让 Kubernetes 集群自动创建新的 kube-proxy
kubectl delete pod -l k8s-app=kube-proxy -n kube-system

配置Node节点也能使用 kubectl 命令

#两个节点机器上
mkdir -pv ~/.kube
touch ~/.kube/config

#master上,注意节点主机名字root@k8s-node1
scp /etc/kubernetes/admin.conf root@k8s-node1:~/.kube/config
scp /etc/kubernetes/admin.conf root@k8s-node2:~/.kube/config

在Kubernetes集群中部署nginx1.14,测试下集群是否正常工作

master机器

  • 部署Nginx

  • kubectl create deployment nginx --image=nginx:1.14-alpine
    
  • 暴露端口

  • kubectl expose deployment nginx --port=80 --type=NodePort
    
  • 查看服务状态

  • kubectl get pods,svc
    

自动补全

# 安装bash
yum -y install bash-completion
# 自动补全 
echo 'source <(kubectl completion bash)' >>~/.bashrc 
kubectl completion bash >/etc/bash_completion.d/kubectl
# 全局
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
source /usr/share/bash-completion/bash_completion

插件addons

安装K8s-Dashboard

master机器

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

#构建 Pod
kubectl apply -f recommended.yaml

#查看 Pod 状态
kubectl get pods --all-namespaces | grep dashboard

#查看所有命名空间namespace
kubectl get svc --all-namespaces

#删除现有dashboard服务
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard

#登录dashboard
cd /etc/kubernetes
vi /etc/kubernetes/dashboard-svc.yaml

#######
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
######

#创建kubernetes-dashboard的 Service服务
kubectl apply -f dashboard-svc.yaml

#查看namespace
kubectl get svc --all-namespaces

#创建 kubernetes-dashboard 管理员角色,在/etc/kubernetes 目录下创建配置文件dashboard-svc-account.yaml
######
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: dashboard-admin
subjects:
  - kind: ServiceAccount
    name: dashboard-admin
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
########

kubectl apply -f dashboard-svc-account.yaml

#获取 token,先查找token文件
kubectl get secret -n kube-system |grep admin|awk '{print $1}'

#系统返回dashboard-admin-token-d4cll,查看token
kubectl describe secret dashboard-admin-token-d4cll -n kube-system|grep '^token'|awk '{print $2}'

#得到了dashboard的token,先复制保存一份
#########
your_token
#########

#查看外部访问端口,也就是之前我们创建的 Service 31519
kubectl get svc --all-namespaces | grep dashboard

#在浏览器访问dashboard,网址输入【集群IP:端口号】如:https://192.168.79.102:31519/可以访问web管理界面 用火狐浏览器
#输入之前生成的token登录dashboard

在这里插入图片描述

kind部署

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.18.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

k8s常用命令

#部署yaml文件:
kubectl apply -f xxx.yaml

#获取节点和服务版本信息,并查看附加信息
kubectl get nodes -o wide

#获取pod信息,默认是default名称空间
kubectl get pod

#获取pod信息,默认是default名称空间,并查看附加信息
#kubectl get pod -o wide

#获取指定名称空间的pod
kubectl get pod -n kube-system

#获取指定名称空间中的指定pod
kubectl get pod -n kube-system podName

#获取所有名称空间的pod
kubectl get pod -A

#查看所有名称空间的service信息
kubectl get svc -A

#查看componentstatuses信息
kubectl get cs

#查看所有deployments信息
kubectl get deploy -A

#查看所有replicasets信息
kubectl get rs -A

#查看所有statefulsets信息
kubectl get sts -A

#查看所有jobs信息
kubectl get jobs -A

扩展

VMware Centos7静态ip设置

备注:本机是windows环境

第一步 配置VMware
打开VMware 左上角打开编辑 右下角更改设置 选择VMware8 取消勾选dhcp 打开NAT设置 记住网关ip(可以自己更改)!!!

在这里插入图片描述

第二步 配置本机windows
打开windows网络和Internet设置 选择更改适配器选项 选择VMnet8并右击选择属性 点击Internet协议版本4 按如下图配置(按自己配置的网关ip)

在这里插入图片描述

第三步 centos7虚拟机ip配置

cd /etc/sysconfig/network-scripts/

ls
找到ifcfg-ens33(也有可能不是ens33,是ens结尾的,按情况来),进去vim

vim ifcfg-ens33

#################
BOOTPROTO=static	
ONBOOT=yes
IPADDR=192.168.60.随便
GATEWAY=your_gateway
NETMASK=255.255.255.0
DNS1=your_gateway
#################

service network restart

# 检查是否配好
ping www.baidu.com

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

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

相关文章

Keil5 MDK新建项目工程

本文重点介绍基于Keil5 MDK实现新建一个完整的工程&#xff0c;第一次新建比较繁琐&#xff0c;建好后续工程可以直接复用 一、新建工程框架 1.新建一个文件夹&#xff0c;命名为Template 2.点击 MDK 的菜单: Project –>New Uvision Project &#xff0c;然后将目录定位…

( “树” 之 前中后序遍历) 145. 二叉树的后序遍历 ——【Leetcode每日一题】

基础概念&#xff1a;前中后序遍历 1/ \2 3/ \ \ 4 5 6层次遍历顺序&#xff1a;[1 2 3 4 5 6]前序遍历顺序&#xff1a;[1 2 4 5 3 6]中序遍历顺序&#xff1a;[4 2 5 1 3 6]后序遍历顺序&#xff1a;[4 5 2 6 3 1] 层次遍历使用 BFS 实现&#xff0c;利用的就是 BFS…

Git从远程仓库克隆仓库后推送到指定分支

git克隆到本地仓库 在得到一个git仓库地址后&#xff0c;首先要配置本地仓库&#xff0c;配置远程仓库地址才可以远程拉取项目。 本地配置的一般流程&#xff1a; git init初始化一个空白git仓库 2. 配置在自己额用户名和邮箱 配置个人信息时方便再团队合作时能知道是谁再何…

2023 CCBN广电展顺利召开,ATEN宏正携广电专属系列解决方案亮相

4月19日-4月21日&#xff0c;第二十九届中国国际广播电视信息网络展览会(CCBN2023)于北京市石景山区首钢会展中心盛大开幕。本届CCBN广电展以“大视听向未来”为主题&#xff0c;内容涵盖广播电视、网络视听、电影、信息化视听、视听消费电子、通信、IT等多个领域创新科技和行业…

MySQL高级第十三篇:MySQL事物日志(redo日志-undo日志执行流程)

MySQL高级第十三篇&#xff1a;MySQL事物日志&#xff08;redo日志-undo日志执行流程&#xff09; 一、概述二、redo 日志1. 为什么需要 redo日志&#xff1f;2. redo 日志的特点3. redo log 整体流程4. redo log 的刷盘策略&#xff1f; 三、undo 日志1. 什么是 undo 日志&…

1026. 节点与其祖先之间的最大差值(4-19日

题目&#xff1a;给定二叉树的根节点 root&#xff0c;找出存在于 不同 节点 A 和 B 之间的最大值 V&#xff0c;其中 V |A.val - B.val|&#xff0c;且 A 是 B 的祖先。 &#xff08;如果 A 的任何子节点之一为 B&#xff0c;或者 A 的任何子节点是 B 的祖先&#xff0c;那么…

context 浅析

在缺少直接调用关系的两个函数之间传递数据&#xff0c;一般都会考虑使用 context&#xff0c;而 context 也被用来存储整个请求链路的公参信息&#xff0c;用户 uid、链路 traceID、特定的业务参数等。函数第一个参数类型设置为 context.Context 也是 Go 的默认写法&#xff0…

2 常见模块库(3)

2.9 积分模块&#xff08;2&#xff09; External reset: 在什么条件下进行外部重置操作描述一下每个选项&#xff1a; Rising&#xff1a;当重置信号从非正的值&#xff08;0或负值&#xff09;变为正值时&#xff0c;重置积分器的状态。 Falling&#xff1a;当重置信号从正…

Java每日一练(20230419)

目录 1. 二叉树的最大深度 &#x1f31f; 2. 二叉树的层序遍历 &#x1f31f;&#x1f31f; 3. 最短回文串 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Jav…

双向带头循环链表的实现

双向带头循环链表 双向带头循环链表结构讲解期望实现功能创建链表和头节点作用头插和头删头插头删 尾插与尾删尾插尾删 pos 删除和插入插入删除 打印和查找 整体代码 这个数据结构可以算是YYDS的存在了。 我们前面讲过的单链表&#xff0c;尾删和尾插需要遍历数组&#xff0c;极…

是时候该换掉你的axios了

axios是一个基于Promise的HTTP客户端&#xff0c;每周的npm下载量4000W&#xff0c;如果回到在10年前&#xff0c;promise式的请求工具是一个很大的创新&#xff0c;它解决了请求繁琐的问题&#xff0c;在那个性能要求不那么高的年代可谓是一骑绝尘。但随着时间的推移&#xff…

【网络】UDP协议 TCP协议

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【网络】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文章…

Centos7安装Elasticsearch6.4.3和Kibana6.4.3

一、下载好安装文件上传到/usr/local 二、安装Java环境 1&#xff09;、解压jdk tar -zxvf jdk-8u181-linux-x64.tar.gz2&#xff09;、 配置Java环境变量 vim /etc/profile 3&#xff09;、profile末尾添加 export JAVA_HOME/usr/local/jdk1.8.0_181 export PATH$JAVA_HO…

【2023 · CANN训练营第一季】昇腾AI入门课(Pytorch)---昇腾AI入门课(PyTorch)微认证考试

1、下列不属于昇腾计算服务层的是() 2、AscendCL的优势包括() 3、使用AscendCL开发应用的基本流程&#xff0c;以下正确的是&#xff1f; 4、关于AscendCL初始化&#xff0c;以下说法不正确的是&#xff1f; 5、以下关于ATC工具说法正确的是 6、模型转换工具的名称是&#xf…

深入实战探究 Vue 2.7 Composition API 的强大之处

最近几年公司开发一直使用的是 Vue2.6&#xff0c;对于逻辑复用使用的是 Mixin 方式&#xff0c;但随着项目体量的增加&#xff0c;带了一些问题&#xff0c;特别是&#xff1a;数据混乱问题&#xff1a;实例上的数据属性从当前模板文件中无法查取到&#xff0c;存在多个 Mixin…

API 鉴权都有哪些分类,这些重点不要错过

API鉴权是保证API安全性和可用性的一项重要措施。通过API鉴权&#xff0c;系统可以对用户或者应用进行有效的身份认证和权限管理。一般来说&#xff0c;在实际开发中&#xff0c;我们使用以下几种API鉴权方式&#xff1a; 1. 基本认证 基本认证是API鉴权的一种最基本形式。此方…

如何创建Spring项目

创建Spring项目 创建一个Maven项目 这里使用的是2023版本的idea。 添加Spring框架支持 在项目的pom.xml中添加Spring支持。这里可以到中央仓库找一下。 <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dep…

Android Binder 图文解释和驱动源码分析

前言 最近在学习Binder&#xff0c;之前都是跳过相关细节&#xff0c;通过阅读文章对Binder有了一些认识&#xff0c;但是并没有真正理解Binder。如果要深入理解Framework的代码&#xff0c;就必须要真正理解Binder。 我学习Binder的方法&#xff1a; 一边阅读Gityuan的Bind…

视觉语言模型究竟能帮助我们完成哪些工作?

当前&#xff0c;多模式人工智能已经成为一个街谈巷议的热门话题。随着GPT-4的最近发布&#xff0c;我们看到了无数可能出现的新应用和未来技术&#xff0c;而这在六个月前是不可想象的。事实上&#xff0c;视觉语言模型对许多不同的任务都普遍有用。例如&#xff0c;您可以使用…

vmware VM虚拟机去虚拟化教程 硬件虚拟机 过鲁大师检测

一 准备工作 1. 这里演示的VM虚拟机版本是12.5.9 虚拟机系统是win7 64位 2. 用到的工具 winhex和Phoenix BIOS Editor 下载地址工具 链接&#xff1a;https://pan.baidu.com/s/1b3FfA3FyQ_lnFQSjpCGLGg?pwd1221 提取码&#xff1a;1221 3. 注意&#…