kebuadm部署k8s集群

官方文档:

Installing kubeadm | Kubernetes

切记要关闭防⽕墙、selinux、禁用交换空间,

cpu核⼼数⾄少为2

内存4G

kubeadm部署k8s⾼可用集群的官方文档:

Creating Highly Available Clusters with kubeadm | Kubernetes

你需要在每台机器上安装以下的软件包:

  • kubeadm:用来初始化集群的指令。(每台机器)

    • master 用来初始化集群

    • node节点用来加入集群

  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。(每个node)

  • kubectl:用来与集群通信的命令行工具。(master)

一、完整安装过程

准备三台机器

192.168.199.200 k8s-master
192.168.199.201 k8s-node1
192.168.199.202 k8s-node2

制作本地解析,修改主机名。相互解析
# vim /etc/hosts
192.168.199.200 k8s-master
192.168.199.201 k8s-node1
192.168.199.202 k8s-node2

所有机器系统配置

1.关闭防⽕墙:

systemctl stop firewalld
systemctl disable firewalld

2.禁用SELinux:

setenforce 0

3.编辑文件/etc/selinux/config,将SELINUX修改为disabled

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

4、注释掉swap分区

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

二、使用kubeadm部署Kubernetes

1、在所有节点安装kubeadm和kubelet、kubectl

首先配置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

提醒:如果下载失败,关闭认证,再次下载

  • kubelet: Kubernetes 的节点代理,负责在每个节点上运行,并确保容器运行在 Pod 中。

  • kubeadm: 是一个命令行工具,用于初始化和管理 Kubernetes 集群。

  • kubectl: 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互。

  • ipvsadm: 是用于设置、维护和检查 Linux 内核中 IP 虚拟服务器(IPVS)表的用户空间实用程序,IPVS 可以实现 Kubernetes 中的服务负载均衡

2、安装kubelet、kubeadm、kubectl、ipvsadm组件

yum install -y kubelet-1.19.1-0.x86_64 kubeadm-1.19.1-0.x86_64 kubectl-1.19.1-0.x86_64 ipvsadm

加载ipvs相关内核模块

modprobe ip_vs && modprobe ip_vs_rr && modprobe ip_vs_wrr && modprobe ip_vs_sh && modprobe nf_conntrack_ipv4

3、编辑文件添加开机启动

vim /etc/rc.local
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4

4、给rc.local添加可执行权限

chmod +x /etc/rc.local

5、配置转发相关参数,否则可能会出错

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF

使配置生效

sysctl --system

6、如果net.bridge.bridge-nf-call-iptables报错,加载br_netfilter模块

modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

7、查看是否加载成功

lsmod | grep ip_vs

8、配置kubelet的cgroups

cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs --pod-infra-container-image=k8s.gcr.io/pause:3.2"
EOF

9、启动kubelet

systemctl daemon-reload
systemctl enable kubelet && systemctl restart kubelet
systemctl status kubelet

你会发现报错误信息:错误是正常现象,因为api-server还没有在master节点上初始化启动

三、master节点初始化

kubeadm init --kubernetes-version=v1.19.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.199.200 --ignore-preflight-errors=Swap

注释:

apiserver-advertise-address=192.168.229.11 master的ip地址。
--kubernetes-version=v1.19.1 --更具具体版本进行修改
--pod-network-cidr=10.244.0.0/16 我们自定义pod给容器内指定的网段
--ignore-preflight-errors=Swap   忽略swap分区错误(我们已经关闭了swap,此处有没有都可以)
注意在检查⼀下swap分区是否关闭

1、Mater重新完成初始化

2、配置使用网络插件

---
kind: Namespace
apiVersion: v1
metadata:
  name: kube-flannel
  labels:
    k8s-app: flannel
    pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: flannel
  name: flannel
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: flannel
  name: flannel
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flannel
subjects:
- kind: ServiceAccount
  name: flannel
  namespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: flannel
  name: flannel
  namespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-flannel
  labels:
    tier: node
    k8s-app: flannel
    app: flannel
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "EnableNFTables": false,
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kube-flannel-ds
  namespace: kube-flannel
  labels:
    tier: node
    app: flannel
    k8s-app: flannel
spec:
  selector:
    matchLabels:
      app: flannel
  template:
    metadata:
      labels:
        tier: node
        app: flannel
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/os
                operator: In
                values:
                - linux
      hostNetwork: true
      priorityClassName: system-node-critical
      tolerations:
      - operator: Exists
        effect: NoSchedule
      - key: node.kubernetes.io/not-ready
        operator: Exists
        effect: NoSchedule
      serviceAccountName: flannel
      initContainers:
      - name: install-cni-plugin
        image: docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2
        command:
        - cp
        args:
        - -f
        - /flannel
        - /opt/cni/bin/flannel
        volumeMounts:
        - name: cni-plugin
          mountPath: /opt/cni/bin
      - name: install-cni
        image: docker.io/flannel/flannel:v0.25.6
        command:
        - cp
        args:
        - -f
        - /etc/kube-flannel/cni-conf.json
        - /etc/cni/net.d/10-flannel.conflist
        volumeMounts:
        - name: cni
          mountPath: /etc/cni/net.d
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      containers:
      - name: kube-flannel
        image: docker.io/flannel/flannel:v0.25.6
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --iface=ens33
        - --kube-subnet-mgr
        resources:
          requests:
            cpu: "100m"
            memory: "50Mi"
        securityContext:
          privileged: false
          capabilities:
            add: ["NET_ADMIN", "NET_RAW"]
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: EVENT_QUEUE_DEPTH
          value: "5000"
        volumeMounts:
        - name: run
          mountPath: /run/flannel
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
        - name: xtables-lock
          mountPath: /run/xtables.lock
      volumes:
      - name: run
        hostPath:
          path: /run/flannel
      - name: cni-plugin
        hostPath:
          path: /opt/cni/bin
      - name: cni
        hostPath:
          path: /etc/cni/net.d
      - name: flannel-cfg
        configMap:
          name: kube-flannel-cfg
      - name: xtables-lock
        hostPath:
          path: /run/xtables.lock
          type: FileOrCreate

3、创建flannel网络

kubectl apply -f kube-flannelv1.19.1.yaml

查看哪一个pod被分配到哪一个节点
[root@k8s-master ~]# kubectl get pod -n kube-system -o wide 

获取节点:
[root@master ~]# kubectl get node
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   94m   v1.19.1

四、所有node节点加⼊集群

1、开启ip转发

sysctl -w net.ipv4.ip_forward=1

2、在所有node节点操作,此命令为初始化master成功后返回的结果

kubeadm join 192.168.199.200:6443 --token 2eo635.zefoh7sqrndzdju6  --discovery-token-ca-cert-hash sha256:20fe16459d5d0f79025be51f7a800af01f7aa1fb5bd3e33b4eb37328facaff07

注意:

如果加入时显示端口占用:
[root@k8s-node2 ~]# kubeadm reset
再次即可

加入后master一直显示noready
对应的节点 systemctl restart kubelet

五、master相关操作

列举所有的token:kubeadm token list

重新生成token:kubeadm token create

查看hash值:ls  /etc/kubernetes/pki/ca.crt

查看pods:kubectl get pods -n kube-system

查看异常pod信息:kubectl describe pod 异常的pod名称 -n kube-system

删除异常pod:  kubectl delete pod pod名称 -n kube-system

查看pods:  kubectl get pods -n kube-system 

查看节点:kubectl get nodes 

1.驱离k8s-node-1节点上的pod(master上)
[root@kub-k8s-master ~]# kubectl drain kub-k8s-node1 --delete-local-data --force --ignore-daemonsets


驱离后 ,调度功能就禁用了该节点
想要恢复:
[root@kub-k8s-master ~] kubectl uncordon k8s-node2

2.删除节点(master上)
[root@kub-k8s-master ~]# kubectl delete node kub-k8s-node1


3.重置节点(node上-也就是在被删除的节点上)
[root@kub-k8s-node1 ~]# kubeadm reset
注1:需要把master也驱离、删除、重置,这⾥给我坑死了,第⼀次没有驱离和删除master,最后
的结果是查看结果⼀切正常,但coredns死活不能用,搞了整整1天,切勿尝试

注2:master上在reset之后需要删除如下文件
# rm -rf /var/lib/cni/ $HOME/.kube/config

一步到位加入集群:

第一种方法:
kubeadm token create --print-join-command
[root@k8s-master ~]# kubeadm token create --print-join-command
会自动生成一个制定了,让你在任意想添加的节点上使用该命令
kubeadm join 192.168.229.11:6443 --token plw7zn.f7pnvhok89fc0og5     --discovery-token-ca-cert-hash sha256:20fe16459d5d0f79025be51f7a800af01f7aa1fb5bd3e33b4eb37328facaff07

第⼆种⽅法:
token=$(kubeadm token generate)
kubeadm token create $token --print-join-command --ttl=0

ttl=0表示令牌用于不会过期
这种方式生成长期有效的加入集群指令

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch是做什么的?

初识elasticsearch 官方网站&#xff1a;Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic Elasticsearch是做什么的&#xff1f; Elasticsearch 是一个分布式搜索和分析引擎&#xff0c;专门用于处理大规模数据的实时搜索、分析和存储。它基于 Apache Lucene …

python语言入门必须要学习的模块化编程案例游戏---画图案例(三)【源码大全】

彩虹五角星 import turtle #引用turtle库 q turtle.Pen() #构造画笔 turtle.bgcolor("black") …

windows mysql 8.0版本重置root密码

1.停止mysql服务 以管理员运行cmd 2.安全模式启动 mysqld --console --skip-grant-tables --shared-memory 3.修改密码 再开个cmd窗口就可以进入了&#xff1a;mysql 先进入mysql database&#xff1a;use mysql 修改密码&#xff1a;ALTER USER rootlocalhost IDENTIFIED …

数据链路层数据帧格式及网络层IP数据包格式

数据帧格式 前导码&#xff1a;进入物理层之前的缓冲区&#xff0c;包含的是7个字节&#xff08;56比特&#xff09;交替出现的0和1&#xff0c;作用&#xff1a;提醒接受系统有帧到来&#xff0c;并且使它与输入定时同步 帧起始定界符&#xff1a;1字节&#xff08;8比特&…

《深度学习》【项目】自然语言处理——情感分析 <下>

目录 一、了解项目 1、任务 2、文件内容 二、续接上篇内容 1、打包数据&#xff0c;转化Tensor类型 2、定义模型&#xff0c;前向传播函数 3、定义训练、测试函数 4、最终文件格式 5、定义主函数 运行结果&#xff1a; 一、了解项目 1、任务 对微博评论信息的情感分…

基础IO -- 理解文件(2)

目录 三&#xff1a;理解文件 1.先用和认识系统调用的文件操作 a. 标记位传参的理解 b.文件打开后权限 c. 关闭文件 d. 向文件里写入 2.引入文件操作符fd 3.理解fd 4.Linux下一切皆文件 5.解决前面衍生出的一些问题 C语言FILE*的理解 C语言为什么这么做 三&#xff…

视觉检测解决方案

视觉检测解决方案是一种利用计算机视觉技术模拟人类视觉功能&#xff0c;对工业产品进行非接触式的图像采集、处理与分析&#xff0c;以实现自动化检测、识别与测量的过程。以下是朗观视觉小编对视觉检测解决方案的详细阐述&#xff1a; 一、技术原理 视觉检测解决方案主要基于…

21世纪当代国学易经起名大师颜廷利:全球知名哲学家思想家

融合儒道精髓&#xff0c;东方智慧倡和谐与品德&#xff0c;道家无为而治显自然之道。21世纪全球最具影响力的思想家颜廷利哲学深思&#xff0c;西方哲学则重人本、实用与理性&#xff0c;科学思维引领实证探索&#xff0c;共绘智慧新篇章。 当代知名哲学家思想家教育家颜廷利的…

前端html css js 练习巩固沉淀2

做一个这样的特效 相当于步骤一样的样式逻辑 我直接粘贴代码了 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

【02】Windows特殊权限-Trustedinstaller

知识点&#xff1a; “TrustedInstaller” 是 Windows 操作系统中的一个特殊账户&#xff0c;用于管理和保护重要的系统文件。它是 Windows 模块安装程序 (Windows Modules Installer) 的一部分&#xff0c;负责安装、修改和删除 Windows 更新和可选组件。默认情况下&#xff…

【C++篇】领会C++标准库:STL

文章目录 前言 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

5、JavaScript(四) ajax+js高级+BOM

25.ajax : 前端向后端异步的取数据而无需刷新页面的技术 1 公司中的整体工作流程 1、项目开发的流程 每个职位该做的工作&#xff1a; 产品经理&#xff1a;提需求的 与客户沟通 画出原型图给程序员使用 UI设计师&#xff1a;美化 替换UI框架&#xff1a;antd element-ui e…

如何克隆Git仓库的子目录:稀疏检出

一、环境 Git 2.34.1 二、前言 一般来说&#xff0c;我们在克隆git仓库的时候&#xff0c;都是一整个仓库都克隆出来的。如果假设现在有一个很大的仓库&#xff0c;仓库里有多个子项目&#xff0c;而我们只想克隆其中一个子项目的时候&#xff0c;应该怎么做呢&#xff1f; …

【时间之外】IT人求职和创业应知【11】

认知决定你的赚钱能力。以下是今天可能影响你求职和创业的热点新闻&#xff1a; 今日关键字&#xff1a;AI【不用解释吧】 1. 尚福林&#xff1a;人工智能将对金融业的经营运行产生深远影响 新闻概要&#xff1a; 在2024金融街论坛年会上&#xff0c;十三届全国政协经济委员…

Oracle VirtualBox虚拟机导入VMware ESXi的方法

VDI文件导入VMware ESXi 软件版本 Oracle VirtualBox 版本7.0 VMware EXSi 5.5 VDI(Virtual Disk Image)是Oracle VirtualBox支持的虚拟磁盘格式。本次操作的VDI文件20GB左右&#xff0c;包含一个使用unbuntn的非结构化系统。而VMware EXSi 6.5支持的格式是OVF或VMDK。 操作步…

数据结构广度优先搜索遍历(有向图和无向图均可)(C语言代码+邻接矩阵方式+连通图和非连通图均可)

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #define MAXVEX 100//最大顶点数 typedef struct {int vexs[MAXVEX];//存储顶点的数组int matrix[MAXVEX][MAXVEX];//存储邻接矩阵的二维数组int vexnum, edgenum;//顶点数边数 }MGraph;…

医院信息化与智能化系统(3)

医院信息化与智能化系统(3) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应的…

Leetcode 最小路径和

这段代码解决的是LeetCode第64题“最小路径和”&#xff0c;其核心思想是动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;。以下是算法的具体解释&#xff1a; 1. 问题描述&#xff1a; 我们给定一个包含非负整数的 m x n 网格&#xff08;grid&…

智慧园区能带来哪些便利?

所谓智慧园区&#xff0c;是指通过信息化手段&#xff0c;实现园区内各项业务的数字化和智能化管理。园区管理者可以利用智能化平台实时监控各项运营情况&#xff0c;如能源使用、安全监控和物流运输等&#xff0c;及时调整管理策略&#xff0c;提高运营效率。智慧园区利用大数…

基于SSM+微信小程序的打印室预约管理系统(打印2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的打印室预约管理系统实现了管理员和用户两个角色。 1、管理员功能有个人中心&#xff0c;用户管理&#xff0c;附近打印店管理&#xff0c;文件打印管理&#xff0c;当…