K8s(Kubernetes)学习(二):k8s集群搭建

news2024/9/19 20:08:15

k8s集群搭建

  • minikube
    只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起。
  • 裸机安装
    至少需要两台机器(主节点、工作节点个一台),需要自己安装 Kubernetes 组件,配置会稍微麻烦点。
    缺点:配置麻烦,缺少生态支持,例如负载均衡器、云存储。
  • 直接用云平台 Kubernetes
    可视化搭建,只需简单几步就可以创建好一个集群。
    优点:安装简单,生态齐全,负载均衡器、存储等都给你配套好,简单操作就搞定
    腾讯云平台容器服务链接:https://cloud.tencent.com/act/cps/redirect?redirect=10058&cps_key=114d98136b019ef3d1d919d8ecadb3b7
  • k3s
    安装简单,脚本自动完成。
    优点:轻量级,配置要求低,安装简单,生态齐全。
    链接:https://k3s.io/

法一:1 minikube

可直接利用Docker Desktop搭建
在这里插入图片描述

法二:2 裸机安装

0 环境准备

  • 节点数量: 3 台虚拟机 centos7
  • 硬件配置: 2G或更多的RAM,2个CPU或更多的CPU,硬盘至少30G 以上
  • 网络要求: 多个节点之间网络互通,每个节点能访问外网

1 集群规划

  • k8s-node1:10.15.0.5
  • k8s-node2:10.15.0.6
  • k8s-node3:10.15.0.7

2 设置主机名

$ hostnamectl set-hostname k8s-node1  
$ hostnamectl set-hostname k8s-node2
$ hostnamectl set-hostname k8s-node3

3 同步 hosts 文件

如果 DNS 不支持主机名称解析,还需要在每台机器的 /etc/hosts 文件中添加主机名和 IP 的对应关系:

cat >> /etc/hosts <<EOF
10.15.0.5 k8s-node1
10.15.0.6 k8s-node2
10.15.0.7 k8s-node3
EOF

4 关闭防火墙

$ systemctl stop firewalld && systemctl disable firewalld

5 关闭 SELINUX

注意: ARM 架构请勿执行,执行会出现 ip 无法获取问题!

$ setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

6 关闭 swap 分区

$ swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab

7 同步时间

$ yum install ntpdate -y
$ ntpdate time.windows.com

8 安装 containerd

# 安装 yum-config-manager 相关依赖
$ yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 containerd yum 源
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 containerd
$ yum install  -y containerd.io cri-tools  
# 配置 containerd
$ cat >  /etc/containerd/config.toml <<EOF
disabled_plugins = ["restart"]
[plugins.linux]
shim_debug = true
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://frz7i079.mirror.aliyuncs.com"]
[plugins.cri]
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"
EOF
# 启动 containerd 服务 并 开机配置自启动
$ systemctl enable containerd && systemctl start containerd && systemctl status containerd 

# 配置 containerd 配置
$ cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

# 配置 k8s 网络配置
$ 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
EOF

# 加载 overlay br_netfilter 模块
$ modprobe overlay
$ modprobe br_netfilter

# 查看当前配置是否生效
$ sysctl -p /etc/sysctl.d/k8s.conf

9 添加源

  • 查看源
$ yum repolist
  • 添加源 x86
$ cat <<EOF > 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
$ mv kubernetes.repo /etc/yum.repos.d/
  • 添加源 ARM
$ cat << EOF > kubernetes.repo 
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
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

$ mv kubernetes.repo /etc/yum.repos.d/

11 安装 k8s

# 安装最新版本
$ yum install -y kubelet kubeadm kubectl

# 指定版本安装
# yum install -y kubelet-1.26.0 kubectl-1.26.0 kubeadm-1.26.0

# 启动 kubelet
$ sudo systemctl enable kubelet && sudo systemctl start kubelet && sudo systemctl status kubelet

12 初始化集群

  • 注意: 初始化 k8s 集群仅仅需要再在 master 节点进行集群初始化!
$ kubeadm init \
--apiserver-advertise-address=10.15.0.5 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/containerd/containerd.sock

# 添加新节点
$ kubeadm token create --print-join-command --ttl=0
$ kubeadm join 10.15.0.21:6443 --token xjm7ts.gu3ojvta6se26q8i --discovery-token-ca-cert-hash sha256:14c8ac5c04ff9dda389e7c6c505728ac1293c6aed5978c3ea9c6953d4a79ed34 

13 配置集群网络

创建配置: kube-flannel.yml ,执行 kubectl apply -f kube-flannel.yml

  • 注意: 只在主节点执行即可!
---
kind: Namespace
apiVersion: v1
metadata:
  name: kube-flannel
  labels:
    pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  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:
  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:
  name: flannel
  namespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-flannel
  labels:
    tier: node
    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",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kube-flannel-ds
  namespace: kube-flannel
  labels:
    tier: node
    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
      serviceAccountName: flannel
      initContainers:
      - name: install-cni-plugin
       #image: flannelcni/flannel-cni-plugin:v1.1.0 for ppc64le and mips64le (dockerhub limitations may apply)
        image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0
        command:
        - cp
        args:
        - -f
        - /flannel
        - /opt/cni/bin/flannel
        volumeMounts:
        - name: cni-plugin
          mountPath: /opt/cni/bin
      - name: install-cni
       #image: flannelcni/flannel:v0.20.2 for ppc64le and mips64le (dockerhub limitations may apply)
        image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2
        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: flannelcni/flannel:v0.20.2 for ppc64le and mips64le (dockerhub limitations may apply)
        image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        resources:
          requests:
            cpu: "100m"
            memory: "50Mi"
          limits:
            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

14 查看集群状态

# 查看集群节点状态 全部为 Ready 代表集群搭建成功
$ kubectl get nodes
NAME        STATUS   ROLES           AGE   VERSION
k8s-node1   Ready    control-plane   21h   v1.26.0
k8s-node2   Ready    <none>          21h   v1.26.0
k8s-node3   Ready    <none>          21h   v1.26.0

# 查看集群系统 pod 运行情况,下面所有 pod 状态为 Running 代表集群可用
$ kubectl get pod -A
NAMESPACE      NAME                                READY   STATUS    RESTARTS   AGE
default        nginx                               1/1     Running   0          21h
kube-flannel   kube-flannel-ds-gtq49               1/1     Running   0          21h
kube-flannel   kube-flannel-ds-qpdl6               1/1     Running   0          21h
kube-flannel   kube-flannel-ds-ttxjb               1/1     Running   0          21h
kube-system    coredns-5bbd96d687-p7q2x            1/1     Running   0          21h
kube-system    coredns-5bbd96d687-rzcnz            1/1     Running   0          21h
kube-system    etcd-k8s-node1                      1/1     Running   0          21h
kube-system    kube-apiserver-k8s-node1            1/1     Running   0          21h
kube-system    kube-controller-manager-k8s-node1   1/1     Running   0          21h
kube-system    kube-proxy-mtsbp                    1/1     Running   0          21h
kube-system    kube-proxy-v2jfs                    1/1     Running   0          21h
kube-system    kube-proxy-x6vhn                    1/1     Running   0          21h
kube-system    kube-scheduler-k8s-node1            1/1     Running   0          21h

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

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

相关文章

基于javaweb实现新闻公布系统,ssm+mysql实现新闻发布平台

使用说明 src/main文件中存放的是前端代码&#xff0c;target文件夹中存放的是后端代码&#xff0c;.idea文件夹是存储IntelliJ IDEA项目的配置信息&#xff0c;主要内容有IntelliJ IDEA项目本身的一些编译配置、文件编码信息、jar包的数据源和相关的插件配置信息&#xff0c;.…

CnOpenData中国各级政府税收分成数据

一、数据简介 “测算中国各级政府间财政收入划分&#xff0c;从数据上把握政府收入的分级分配的规律&#xff0c;是剖析中国地方政府行为及其经济影响的重要基础。本文结合中国政府间财政关系的特点&#xff0c;详细测算多层级政府、多口径财政收入的分配状况&#xff0c;构建了…

【unity之UI专题】GUI(IMGUI)详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

人工智能产品经理应该怎么做

一、项目与产品的区别 二、项目与产品经理的区别 三、人工智能产品经理的能力模型 产品设计&#xff1a;这个是产品经理的必备技能&#xff0c;包括市场调研、竞品分析、需求分析、产品规划、产品设计、营销策划。需要注意的是&#xff0c;这个里边所讲的产品设计是面向业务层面…

Windows环境Java+VUE项目现场实施总结,JDK安装环境变量配置、Nginx安装、MySQL安装、Redis安装、bat启动脚本编写

前言 项目组成&#xff1a; Java后台接口对外开放接口jar包&#xff08;包含mysql和redis连接&#xff09;windows环境后台启动部署&#xff0c;redis后台启动&#xff1b;vue打包前端静态文件包&#xff1b;使用nginx代理接口静态文件&#xff0c;本地部署加一键启动脚本&…

【Nginx】第二章 Nginx安装

第2章 Nginx安装 2.1 进入nginx官网&#xff0c;下载 nginx news nginx-1.12.2.tar.gz 2.2 需要的安装包 pcre-8.37.tar.gz openssl-1.0.1t.tar.gz zlib-1.2.8.tar.gz nginx-1.12.2.tar.gz 2.3 在线安装nginx 第一步&#xff0c;安装pcre 第一步 联网下载pcre …

IOS自动化测试环境搭建(Python Java)

一、前言 IOS的App自动化测试与Android的一样&#xff0c;也可以用appium来进行。但是IOS自动化依赖苹果的osx系统、Xcode构建等&#xff0c;且封闭的系统需要苹果开发者账号才可以驱动真机。Appium的环境配置有点麻烦&#xff0c;可能大部分时间都在处理各种稀奇古怪的报错&am…

基础的git命令使用

Git区域概念 Git命令行操作 Git单人使用 注意项&#xff08;务必认真阅读&#xff09; Git Bash Here”终端 初始化仓库 提交工作区的内容到版本库 查看版本的记录 查看工作区的状态 版本回退 版本前进 Git远程仓库 克隆项目 推送到远程 拉取远程的更新 Git区域概…

go实现简单的内网穿透

一、内网穿透 1. 内网穿透介绍 内网穿透是一种通过互联网建立远程连接到私有网络&#xff08;内网&#xff09;中设备的技术。通常情况下&#xff0c;内网设备由于位于一个受限制的网络环境中&#xff0c;无法直接从外部访问。内网穿透通过将内网设备的流量转发到公共网络上的…

自动化测试框架[各自动化测试框架大比拼]

目录 Cypress与Selenium/WebDriver Language Bindings/Client Selenium/WebDriver执行慢 Cypress与Selenium/WebDriver比较 Cypress与Karma比较 Cypress与Nightwatch比较 Cypress与Protractor比较 Cypress与TestCafe比较 Cypress和Puppeteer比较 Cypress与Selenium/We…

浅谈智能电容器的结构与功能在电网中的应用 安科瑞 许敏

摘要&#xff1a;近年来&#xff0c;随着我国电力工业的不断发展&#xff0c;大范围的高压输电网络逐渐形成&#xff0c;同时对电网无功功率的要求也日渐严格。电网无功功率不平衡将导致系统电压的巨大波动&#xff0c;严重时会导致用电设备的损坏。因此&#xff0c;研究无功补…

C++与QML 信号与槽交互

一、全局属性 在main.cpp中通过 QQmlApplicationEngine engine 获得全局对象 QQmlApplicationEngine engine; //全局对象 上下文对象 QQmlContext* context engine.rootContext(); //获取屏幕的大小 Screen *screen QGuiApplication::primaryScreen(); …

jquery基础知识整理

写在前面的话&#xff1a;由于公司做的政府网站&#xff0c;需要考虑到兼容ie。所以我们使用jquery解决方案。在一些展示类的、不是一个多网页的整体应用中。我们仍然可以使用jQuery进行开发。 以下是我看慕课网整理的jQuery知识。慕课网课程链接jQuery课程。 以下是我整理的知…

文档识别开发“零门槛”!合合信息智能文字识别技术助力柳州银行“降本增效”

现阶段&#xff0c;越来越多的金融机构将业务转到线上&#xff0c;推出了“零接触”金融服务以提升业务流程效率。在此过程中&#xff0c;智能文字识别技术对提升复杂版式文档录入效率起到了重要作用。 近期&#xff0c;在元脑生态框架下&#xff0c;合合信息将智能文字识别技…

数学建模算法(基于matlab和python)之 三次样条插值与多项式拟合(2/10)

实验目的及要求&#xff1a; 1、会在Matlab平台上进行样条插值&#xff1b; 2、会在Matlab平台上进行最小二乘拟合。 实验内容&#xff1a; 1、利用spline函数绘制【0&#xff0c;10】内步长为1的插值节点处的的样条曲线。 2、根据下列数据三转角方程法构造三次样条函数…

Linux命令大全(面试必备)

前两节有说Git命令&#xff0c;反馈还不错&#xff0c;看来大家对这些必备的命令还挺感兴趣哈&#xff0c;这节就罗列一些Linux必须掌握的命令。 干货满满哦&#xff0c;直接发车... 一、常用的基本命令 1、关机开机 关机 shutdown-h now 立刻关机shutdown-h 3 3分钟后关机…

Java八股文面试(黑马)

Redis篇 数据库的并发不高&#xff0c;请求到了一定的量就会击垮数据库&#xff0c;导致宕机。 大概率是客户端正好在写入数据&#xff0c;sentinel与当前master出现分区 而 重新选举了一个master Mysql篇

IOS 手机抓包 频繁 访问 gateway.icloud.com.cn:443

在抓包的时候&#xff0c;有时候苹果手机在重启后频繁出现gateway.icloud.com.cn:443请求 这种情况需要在手机上进行设置&#xff0c;适用于IOS16.0以上版本&#xff0c;其他版本不清楚&#xff0c;没有尝试过 进入 设置--点击AppleID &#xff0c;进入个人信息页面---点击iCl…

开发工具-网络测试工具 POSTMAN 的脚本使用

开发工具-网络测试工具 POSTMAN 的脚本使用 postman 脚本应用基础设置变量、获取变量示例环境变量的使用测试 发送请求示例常用的变量、方法responseBody 获取响应体内容pm.response 获取响应信息pm.expect() JSON检查cheerio.load() 类似于 jquery 操作 html 元素 POSTMAN 是网…

做独立站要选择什么样的产品呢?这些要点要注意!

跨境圈都在说独立站能不能成功七分靠选品&#xff0c;三分靠运营&#xff0c;可见选品是决定独立站能不能成功的一大关键因素&#xff0c;只有先选定了产品&#xff0c;才能进行店铺装修、物流设置&#xff0c;以及后续的运营工作。 那么独立站的卖家应该如何去选品呢&#xf…