二进制部署高可用kubernetes1.25.4

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 二进制部署高可用kubernetes1.25.4

shell 脚本部署二进制高可用 k8s 集群

脚本网盘链接:https://pan.baidu.com/s/11rut6hScd6nWP4iMj3NpKA?pwd=cjcj

CSDN下载链接

关于脚本

1.脚本目前可用CentOS7.x,作者在centOS7.9已验证

2.脚本使用方法(在第一个master节点执行)

tar -xf k8s1.25.4_binary.xz -C /

cd /k8s/sh && ./main.sh

2.在执行脚本前一定要先修改/k8s/config/env.sh

3.在/k8s/config/env.sh配置完全正确的情况下,脚本会自动关闭防火墙,selinux

4.脚本根据1.25.4编写,如需要安装其他版本请自行修改配置

5.脚本部署时候涉及自签证书,存在如下证书请求文件需要修改IP地址

/k8s/pki/apiserver-csr.json

/k8s/pki/etcd-csr.json

6.由于etcd集群安装时候需要多个节点同时在线才会正常,因此安装etcd时候如果第一个节点卡住超过2秒可以先Ctrl+C中断继续执行第二和第三个节点的etcd启动,待etcd脚本执行完毕之后在检查集群整体是否健康

目录结构

.
├── bin_tmp
│   ├── cfssldir
│   │   ├── cfssl
│   │   ├── cfssl-certinfo
│   │   └── cfssljson
│   ├── cni
│   │   ├── bandwidth
│   │   ├── bridge
│   │   ├── dhcp
│   │   ├── firewall
│   │   ├── flannel
│   │   ├── host-device
│   │   ├── host-local
│   │   ├── ipvlan
│   │   ├── loopback
│   │   ├── macvlan
│   │   ├── portmap
│   │   ├── ptp
│   │   ├── sbr
│   │   ├── static
│   │   ├── tuning
│   │   ├── vlan
│   │   └── vrf
│   ├── containerddir
│   │   ├── bandwidth
│   │   ├── bridge
│   │   ├── containerd
│   │   ├── containerd-shim
│   │   ├── containerd-shim-runc-v1
│   │   ├── containerd-shim-runc-v2
│   │   ├── containerd-stress
│   │   ├── crictl
│   │   ├── critest
│   │   ├── ctd-decoder
│   │   ├── ctr
│   │   ├── dhcp
│   │   ├── firewall
│   │   ├── host-device
│   │   ├── host-local
│   │   ├── ipvlan
│   │   ├── loopback
│   │   ├── macvlan
│   │   ├── portmap
│   │   ├── ptp
│   │   ├── runc
│   │   ├── sbr
│   │   ├── static
│   │   ├── tuning
│   │   ├── vlan
│   │   └── vrf
│   ├── etcddir
│   │   ├── etcd
│   │   ├── etcdctl
│   │   └── etcdutl
│   ├── k8sdir
│   │   ├── kube-apiserver
│   │   ├── kube-controller-manager
│   │   ├── kubectl
│   │   ├── kubelet
│   │   ├── kube-proxy
│   │   └── kube-scheduler
│   └── nginxdir
│       └── nginx
├── config
│   ├── 10-flannel.conflist
│   ├── CentOS-Base.repo
│   ├── chrony.conf
│   ├── cni-default.conf
│   ├── containerd.conf
│   ├── containerd.hosts.toml
│   ├── containerd.service
│   ├── crictl.yaml
│   ├── elrepo.repo
│   ├── env.sh
│   ├── epel.repo
│   ├── etcd.service
│   ├── hosts
│   ├── ipvs.conf
│   ├── k8s.conf
│   ├── kube-apiserver.service
│   ├── kube-controller-manager.service
│   ├── kubelet-conf.yml
│   ├── kubelet.service
│   ├── kube-nginx.service
│   ├── kube-proxy.service
│   ├── kube-proxy.yaml
│   ├── kube-scheduler.service
│   ├── limits.conf.tmp
│   └── nginx.conf
├── kubeconfig
├── pki
│   ├── admin-csr.json
│   ├── apiserver-csr.json
│   ├── ca-config.json
│   ├── ca.csr
│   ├── ca-csr.json
│   ├── ca-key.pem
│   ├── ca.pem
│   ├── controller-manager-csr.json
│   ├── etcd-csr.json
│   ├── front-proxy-ca.csr
│   ├── front-proxy-ca-csr.json
│   ├── front-proxy-ca-key.pem
│   ├── front-proxy-ca.pem
│   ├── front-proxy-client-csr.json
│   ├── kube-proxy-csr.json
│   └── scheduler-csr.json
├── README.md
├── sh
│   ├── 00.init_install.sh
│   ├── 01.chrony.sh
│   ├── 02.kernel.sh
│   ├── 03.scpbin.sh
│   ├── 04.etcd.sh
│   ├── 05.nginx.sh
│   ├── 06.ipvs.sh
│   ├── 07.containerd.sh
│   ├── 08.ssl.sh
│   ├── 09.apiserver.sh
│   ├── 10.controller-manager.sh
│   ├── 11.scheduler.sh
│   ├── 12.kubelet.sh
│   ├── 13.kube-proxy.sh
│   ├── 14.yaml.sh
│   └── main.sh
├── ssl
├── ssl_etcd
└── yaml
    ├── bootstrap.secret.yaml
    ├── calico.yaml
    ├── coredns_init.yaml
    ├── flannel_init.yaml
    ├── ingress_init.yaml
    ├── metrics-server.yaml
    └── nfs-storage.yaml

脚本配置参考

#!/bin/bash
# k8s节点网段,方便做chronyd对时
NODEIPS=192.168.3.0/24
# k8s集群所有节点
HOSTS=(master1 master2 master3 node1) #可以以数组方式添加节点,添加之后需要在下方备注节点IP地址
# k8s管理节点
MASTERS=(master1 master2 master3)
# k8s工作节点
WORKS=(master1 master2 master3 node1) #可以以数组方式添加节点,添加之后需要在下方备注节点IP地址
# 每个节点对应的IP地址
master1=192.168.3.201
master2=192.168.3.202
master3=192.168.3.203
node1=192.168.3.204
#node2=192.168.123.15
# 节点root密码,方便脚本自动免密
export SSHPASS=1
# 二进制文件所在目录
PATH=$PATH:/k8s/bin/
# 配置kubectl自动补全
source <(kubectl completion bash)
# 服务网段(Service CIDR),部署前路由不可达,部署后集群内部使用IP:Port可达
SERVICE_CIDR="10.100.0.0/16"
# Pod 网段(Cluster CIDR),部署前路由不可达,部署后路由可达(flanneld 保证)
CLUSTER_CIDR="172.31.0.0/16"
# 服务端口范围(NodePort Range)
NODE_PORT_RANGE="30000-40000"
# etcd集群服务地址列表(默认复用3个master节点)
ETCD_ENDPOINTS="https://$master1:2379,https://$master2:2379,https://$master3:2379"
# etcd集群服务地址列表(默认复用3个master节点)
ETCD_CLUSTERS="master1=https://$master1:2380,master2=https://$master2:2380,master3=https://$master3:2380"
# flanneld 网络配置前缀
FLANNEL_ETCD_PREFIX="/kubernetes/network"
# kubernetes 服务IP(预先分配,一般为SERVICE_CIDR中的第一个IP)
CLUSTER_KUBERNETES_SVC_IP="10.100.0.1"
# 集群 DNS 服务IP(从SERVICE_CIDR 中预先分配)
CLUSTER_DNS_SVC_IP="10.100.0.2"
# 集群 DNS 域名
CLUSTER_DNS_DOMAIN="cluster.lcal."
logger() {
  TIMESTAMP=$(date +'%Y-%m-%d %H:%M:%S')
  case "$1" in
    debug)
  printf "\e[1;34m===================== ${TIMESTAMP} =====================\e[0m\n"
  printf "\e[7;36m[DEBUG] $2 \e[0m\n"
      #echo -e "$TIMESTAMP \033[36mDEBUG $2\033[0m"
      ;;
    info)
  printf "\e[1;34m===================== ${TIMESTAMP} =====================\e[0m\n"
        printf "\e[7;32m[INFO] $2 \e[0m\n"
      #echo -e "$TIMESTAMP \033[32mINFO $2\033[0m"
      ;;
    warn)
  printf "\e[1;34m===================== ${TIMESTAMP} =====================\e[0m\n"
        printf "\e[7;33m[WARNING] $2 \e[0m\n"
      #echo -e "$TIMESTAMP \033[33mWARN $2\033[0m"
      ;;
    error)
  printf "\e[1;34m===================== ${TIMESTAMP} =====================\e[0m\n"
        printf "\e[7;31m[ERROR] $2 \e[0m\n"
      #echo -e "$TIMESTAMP \033[31mERROR $2\033[0m"
      ;;
    *)
      ;;
  esac
}

脚本执行结果

3主1从集群节点概况

[root@master1 sh]# kubectl get nodes -o wide
NAME      STATUS   ROLES    AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIME
master1   Ready    <none>   48m   v1.25.4   192.168.3.201   <none>        CentOS Linux 7 (Core)   6.1.0-1.el7.elrepo.x86_64   containerd://1.6.10
master2   Ready    <none>   48m   v1.25.4   192.168.3.202   <none>        CentOS Linux 7 (Core)   6.1.0-1.el7.elrepo.x86_64   containerd://1.6.10
master3   Ready    <none>   48m   v1.25.4   192.168.3.203   <none>        CentOS Linux 7 (Core)   6.1.0-1.el7.elrepo.x86_64   containerd://1.6.10
node1     Ready    <none>   48m   v1.25.4   192.168.3.204   <none>        CentOS Linux 7 (Core)   6.1.0-1.el7.elrepo.x86_64   containerd://1.6.10


安装CNI之后集群Pod概况

[root@master1 sh]# kubectl get pod -A
NAMESPACE       NAME                                        READY   STATUS              RESTARTS   AGE
ingress-nginx   ingress-nginx-admission-create-rn7k7        0/1     ContainerCreating   0          1m
ingress-nginx   ingress-nginx-admission-patch-pxq5x         0/1     ContainerCreating   0          1m
ingress-nginx   ingress-nginx-controller-86ccc65f47-59njl   0/1     ContainerCreating   0          1m
kube-flannel    kube-flannel-ds-dmtbr                       1/1     Running             0          19s
kube-flannel    kube-flannel-ds-msq9p                       1/1     Running             0          19s
kube-flannel    kube-flannel-ds-v5rzc                       1/1     Running             0          19s
kube-flannel    kube-flannel-ds-vpr24                       1/1     Running             0          19s
kube-system     coredns-5d4d84bd85-j4xvd                    1/1     Running             0          10m
kube-system     coredns-5d4d84bd85-knvbx                    1/1     Running             0          10m
kube-system     metrics-server-5b8d488886-w2f99             1/1     Running             0          10m
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
122 60
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
210 62
|
21天前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
61 3
|
1月前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(1)服务调用(一)
微服务实践k8s&dapr开发部署实验(1)服务调用(一)
49 2
|
1月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
108 1
|
1月前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
74 0
|
1月前
|
Kubernetes 网络协议 安全
[kubernetes]二进制方式部署单机k8s-v1.30.5
[kubernetes]二进制方式部署单机k8s-v1.30.5
|
1月前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(1)服务调用(二)
微服务实践k8s&dapr开发部署实验(1)服务调用(二)
52 0