编辑
2024-08-12
云计算-Kubernetes
00
请注意,本文编写于 605 天前,最后修改于 0 天前,其中某些信息可能已经过时。

目录

K8s Master节点
K8s Node节点

对于刚接触 Kubernetes 的运维人员来说,手动搭建一套完整的 K8s 集群涉及环境初始化、Docker 安装、Kubeadm 配置、网络插件部署等多个环节,门槛较高。本文提供一套半自动化安装脚本,帮助初学者快速理解 K8s 集群的部署流程。

核心内容包括:

  1. 脚本整体设计

    • Master 节点脚本:负责 Docker 安装、K8s 组件部署、Master 初始化、Flannel 网络插件安装
    • Node 节点脚本:负责环境准备、Docker 安装、K8s 组件安装,等待加入集群
  2. 环境初始化(init_env

    • 关闭防火墙与 SELinux
    • 禁用 swap 分区(K8s 强制要求)
    • 配置网桥参数(net.bridge.bridge-nf-call-iptables=1
    • 时间同步(使用阿里云 NTP)
  3. Docker 安装与配置

    • 添加阿里云 Docker CE 源
    • 配置镜像加速器(163、USTC、Docker 中国官方源)
  4. K8s 组件安装

    • 添加阿里云 Kubernetes 源
    • 安装指定版本(1.19.4)的 kubeletkubeadmkubectl
  5. Master 节点初始化

    • kubeadm init 指定 API Server 地址、镜像仓库(阿里云镜像)、Service CIDR、Pod CIDR
    • 生成 admin.conf 配置文件
    • 安装 Flannel 网络插件(kube-flannel.yml
  6. Node 节点加入

    • Master 脚本生成永不过期的 Token 和加入命令
    • Node 节点执行该命令加入集群
  7. 关键参数说明

    • k8s_service_cidr=10.96.0.0/12:Service 网段
    • k8s_pod_network_cidr=10.244.0.0/16:Pod 网段(需与 Flannel 配置一致)

本文适合 Kubernetes 初学者学习部署流程,也可作为企业内部自动化部署的参考模板。

text
我直接打包了,不太好描述,应该可以看懂,看不懂请私信我邮箱tianjun@odboy.cn,或者微信i_odboy

======== 点击此处下载 ========

K8s Master节点

带有master的脚本意思是在master节点上执行的, 以下为脚本内容

shell
#!/bin/bash # Kubernetes部署环境要求 #(1)一台或多台机器,操作系统CentOS 7.x-86_x64 #(2)硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+ #(3)集群内各个机器之间能相互通信 #(4)集群内各个机器可以访问外网,需要拉取镜像 #(5)禁止swap分区 # 安装步骤 #1. 安装docker #1.1 如果没有安装docker,则安装docker。会附带安装一个docker-compose # #2. 安装k8s #2.1 初始化环境 #2.2 添加安装源 #2.3 安装kubelet、kubectl、kubeadmin #2.4 安装master #2.5 安装网络插件 # 如果一个命令返回一个非0退出状态值(失败)就退出 set -e # 安装日志 install_log=/var/log/install_k8s.log install_time=$(date +'%Y%m%d %T') # k8s相关 k8s_version=1.19.4 k8s_service_cidr=10.96.0.0/12 ## 这个与component中, kube-flannel.yml文件中的, net-conf.json配置项中的Network节点一致 k8s_pod_network_cidr=10.244.0.0/16 function log_info(){ # ${1}表示传入info的第一个参数 echo -e "\x1b[0;32m[$install_time] [Info] ${1}\x1b[0m" } function run_cmd(){ sh -c "$1 | $(tee -a "$install_log")" } function run_function(){ $1 | tee -a "$install_log" } function install_init() { # yum source alibaba mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak curl http://mirrors.aliyun.com/repo/Centos-7.repo > /etc/yum.repos.d/CentOS-Base.repo curl http://mirrors.aliyun.com/repo/epel-7.repo > /etc/yum.repos.d/epel.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/epel.repo # 安装常用软件包 yum install wget -y yum clean all yum makecache yum -y update } function install_docker(){ log_info "1.安装docker..." yum install yum-utils device-mapper-persistent-data lvm2 -y #yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast yum install docker-ce -y log_info "2.启动 Docker CE..." sudo systemctl enable docker sudo systemctl start docker log_info "3.添加镜像加速器..." if [ ! -f "/etc/docker/daemon.json" ];then touch /etc/docker/daemon.json fi cat <<EOF > /etc/docker/daemon.json { "registry-mirrors": [ "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com" ] } EOF log_info "4.重新启动服务..." sudo systemctl daemon-reload sudo systemctl restart docker log_info "5.测试 Docker 是否安装正确..." docker run hello-world #log_info "6.安装docker-compose..." #sudo curl -L "https://mirror.ghproxy.com/https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #sudo chmod a+x /usr/local/bin/docker-compose # 8.验证是否安装成功 #log_info "7.验证docker-compose是否安装成功..." #docker-compose -v } function install_k8s() { log_info "初始化k8s部署环境..." init_env log_info "添加k8s安装源..." add_aliyun_repo log_info "安装kubelet kubeadmin kubectl..." install_kubelet_kubeadmin_kubectl log_info "安装kubernetes master..." yum -y install net-tools if [[ ! "$(ps aux | grep 'kubernetes' | grep -v 'grep')" ]];then kubeadmin_init else log_info "kubernetes master已经安装..." fi log_info "安装网络插件flannel..." install_flannel log_info "去污点..." kubectl taint nodes --all node-role.kubernetes.io/master- } function init_env() { log_info "初始化部署环境..." log_info "关闭防火墙..." systemctl stop firewalld systemctl disable firewalld log_info "关闭selinux..." sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config source /etc/selinux/config log_info "关闭swap(k8s禁止虚拟内存以提高性能)..." swapoff -a sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab log_info "设置网桥参数..." cat <<-EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system #生效 sysctl -w net.ipv4.ip_forward=1 log_info "时间同步..." yum install ntpdate -y ntpdate ntp.aliyun.com } function add_aliyun_repo() { log_info "添加Kubernetes Aliyun安装源..." 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 } function install_kubelet_kubeadmin_kubectl() { log_info "安装kubernetes..." yum install kubelet-$k8s_version kubeadm-$k8s_version kubectl-$k8s_version -y systemctl enable kubelet.service log_info "确认kubelet kubeadmin kubectl是否安装成功..." yum list installed | grep kubelet yum list installed | grep kubeadm yum list installed | grep kubectl kubelet --version } function kubeadmin_init() { local_ip=$(ip a| grep "scope global"|grep -v "docker"| cut -d " " -f 6| cut -d "/" -f 1) kubeadm init --apiserver-advertise-address="${local_ip}" --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v$k8s_version --service-cidr=$k8s_service_cidr --pod-network-cidr=$k8s_pod_network_cidr mkdir -p "$HOME"/.kube sudo cp -i /etc/kubernetes/admin.conf "$HOME"/.kube/config sudo chown "$(id -u)":"$(id -g)" "$HOME"/.kube/config } function install_flannel() { kubectl apply -f ./component/kube-flannel.yml } function gen_never_expire_token() { log_info "生成永不过期的Token,并且展示node节点加入子节点的命令" kubeadm token create --ttl 0 --print-join-command } run_function "install_docker" run_function "install_k8s" run_function "gen_never_expire_token"

K8s Node节点

带有node的脚本意思是在node节点上执行的, 以下为脚本内容

shell
#!/bin/bash # Kubernetes部署环境要求: #(1)一台或多台机器,操作系统CentOS 7.x-86_x64 #(2)硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+ #(3)集群内各个机器之间能相互通信 #(4)集群内各个机器可以访问外网,需要拉取镜像 #(5)禁止swap分区 # 安装步骤 #1. 安装docker #1.1 如果没有安装docker,则安装docker。会附带安装一个docker-compose # #2. 安装k8s #2.1 初始化环境 #2.2 添加安装源 #2.3 安装kubelet、kubectl、kubeadmin #2.4 安装master #2.5 安装网络插件 # 如果一个命令返回一个非0退出状态值(失败)就退出 set -e # 安装日志 install_log=/var/log/install_k8s.log install_time=$(date +'%Y%m%d %T') # k8s相关 k8s_version=1.19.4 k8s_service_cidr=10.96.0.0/12 # 这个与component中, kube-flannel.yml文件中的, net-conf.json配置项中的Network节点一致 k8s_pod_network_cidr=10.244.0.0/16 # 这个地址需要手动修改哦,别忘了 k8s_master_ipaddr=192.168.234.100 function log_info(){ # ${1}表示传入info的第一个参数 echo -e "\x1b[0;32m[$install_time] [Info] ${1}\x1b[0m" } function run_cmd(){ sh -c "$1 | $(tee -a "$install_log")" } function run_function(){ $1 | tee -a "$install_log" } function install_init() { mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak curl http://mirrors.aliyun.com/repo/Centos-7.repo > /etc/yum.repos.d/CentOS-Base.repo curl http://mirrors.aliyun.com/repo/epel-7.repo > /etc/yum.repos.d/epel.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/epel.repo yum clean all yum makecache yum -y update } function install_docker(){ log_info "1.安装docker..." yum install yum-utils device-mapper-persistent-data lvm2 -y #yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast yum install docker-ce -y log_info "2.启动 Docker CE..." sudo systemctl enable docker sudo systemctl start docker log_info "3.添加镜像加速器..." if [ ! -f "/etc/docker/daemon.json" ];then touch /etc/docker/daemon.json fi cat <<EOF > /etc/docker/daemon.json { "registry-mirrors": [ "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com" ] } EOF log_info "4.重新启动服务..." sudo systemctl daemon-reload sudo systemctl restart docker log_info "5.测试 Docker 是否安装正确..." docker run hello-world #log_info "6.安装docker-compose..." #sudo curl -L "https://mirror.ghproxy.com/https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #sudo chmod a+x /usr/local/bin/docker-compose # 8.验证是否安装成功 #log_info "7.验证docker-compose是否安装成功..." #docker-compose -v } function install_k8s() { info "初始化k8s部署环境..." init_env info "添加k8s安装源..." add_aliyun_repo info "安装kubelet kubeadmin kubectl..." install_kubelet_kubeadmin_kubectl } # 初始化部署环境 function init_env() { info "关闭防火墙..." systemctl stop firewalld systemctl disable firewalld info "关闭selinux..." sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config source /etc/selinux/config log_info "关闭swap(k8s禁止虚拟内存以提高性能)..." swapoff -a sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab info "设置网桥参数" cat <<-EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system #生效 sysctl -w net.ipv4.ip_forward=1 log_info "时间同步..." yum install ntpdate -y ntpdate ntp.aliyun.com } # 添加aliyun安装源 function add_aliyun_repo() { 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 } function install_kubelet_kubeadmin_kubectl() { log_info "安装kubernetes..." yum install kubelet-$k8s_version kubeadm-$k8s_version kubectl-$k8s_version -y systemctl enable kubelet.service log_info "确认kubelet kubeadmin kubectl是否安装成功..." yum list installed | grep kubelet yum list installed | grep kubeadm yum list installed | grep kubectl kubelet --version } function kubeadmin_init() { kubeadm init --apiserver-advertise-address="${k8s_master_ipaddr}" --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v$k8s_version --service-cidr=$k8s_service_cidr --pod-network-cidr=$k8s_pod_network_cidr mkdir -p "$HOME"/.kube sudo cp -i /etc/kubernetes/admin.conf "$HOME"/.kube/config sudo chown "$(id -u)":"$(id -g)" "$HOME"/.kube/config } function install_flannel() { kubectl apply -f ./component/kube-flannel.yml } run_function "install_docker" run_function "install_k8s"
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Odboy

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC 4.0 BY-SA 许可协议。转载请注明出处!