温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何安装k8s集群

发布时间:2021-11-15 15:51:25 来源:亿速云 阅读:154 作者:iii 栏目:大数据
# 如何安装Kubernetes(k8s)集群 ## 目录 - [前言](#前言) - [环境准备](#环境准备) - [硬件要求](#硬件要求) - [操作系统要求](#操作系统要求) - [网络要求](#网络要求) - [安装前配置](#安装前配置) - [关闭Swap](#关闭swap) - [配置主机名与Hosts](#配置主机名与hosts) - [安装依赖工具](#安装依赖工具) - [配置内核参数](#配置内核参数) - [安装容器运行时](#安装容器运行时) - [安装Kubernetes组件](#安装kubernetes组件) - [添加Kubernetes仓库](#添加kubernetes仓库) - [安装kubeadm/kubelet/kubectl](#安装kubeadmkubeletkubectl) - [初始化Master节点](#初始化master节点) - [运行kubeadm init](#运行kubeadm-init) - [配置kubectl](#配置kubectl) - [安装网络插件](#安装网络插件) - [加入Worker节点](#加入worker节点) - [验证集群状态](#验证集群状态) - [部署测试应用](#部署测试应用) - [集群维护](#集群维护) - [升级集群](#升级集群) - [备份与恢复](#备份与恢复) - [常见问题排查](#常见问题排查) - [总结](#总结) ## 前言 Kubernetes(简称k8s)是当前最流行的容器编排平台,能够自动化部署、扩展和管理容器化应用。本文将详细介绍如何从零开始搭建一个生产可用的Kubernetes集群,涵盖从环境准备到集群验证的全过程。 ## 环境准备 ### 硬件要求 - **Master节点**(控制平面): - 至少2核CPU - 4GB内存 - 20GB磁盘空间 - 稳定的网络连接 - **Worker节点**(工作节点): - 根据工作负载调整 - 建议至少4核CPU/8GB内存/50GB磁盘 > 生产环境建议:3个Master节点实现高可用 + 多个Worker节点 ### 操作系统要求 - 支持的操作系统: - Ubuntu 20.04/22.04 LTS - CentOS 7/8 - RHEL 7/8 - Debian 10/11 本文以**Ubuntu 22.04 LTS**为例演示安装过程。 ### 网络要求 - 节点间网络互通 - 开放端口: - Master节点:6443, 2379-2380, 10250-10252 - Worker节点:10250, 30000-32767 - 建议配置: - 非NAT环境 - 每个节点固定内网IP - 禁用防火墙或配置正确规则 ## 安装前配置 ### 关闭Swap Kubernetes 1.8+要求禁用Swap: ```bash sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 

配置主机名与Hosts

  1. 设置主机名(每个节点不同):
sudo hostnamectl set-hostname k8s-master # Master节点 sudo hostnamectl set-hostname k8s-node1 # Worker节点 
  1. 编辑/etc/hosts(所有节点相同):
192.168.1.100 k8s-master 192.168.1.101 k8s-node1 192.168.1.102 k8s-node2 

安装依赖工具

sudo apt-get update && sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release 

配置内核参数

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system 

安装容器运行时

Kubernetes支持多种容器运行时,本文选择containerd:

# 安装containerd sudo apt-get install -y containerd # 生成默认配置 sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml # 修改配置启用systemd cgroup驱动 sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml # 重启服务 sudo systemctl restart containerd sudo systemctl enable containerd 

安装Kubernetes组件

添加Kubernetes仓库

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg \ https://packages.cloud.google.com/apt/doc/apt-key.gpg echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | \ sudo tee /etc/apt/sources.list.d/kubernetes.list 

安装kubeadm/kubelet/kubectl

sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl # 防止自动升级 

初始化Master节点

运行kubeadm init

sudo kubeadm init \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.1.100 \ --control-plane-endpoint=k8s-master 

成功后会显示:

Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:12345... 

配置kubectl

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 

安装网络插件

选择Calico网络插件:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml 

验证安装:

kubectl get pods -n kube-system 

加入Worker节点

在每个Worker节点执行Master初始化时输出的join命令:

sudo kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:12345... 

验证集群状态

kubectl get nodes # 查看所有节点状态 kubectl cluster-info # 查看集群信息 kubectl get pods -A # 查看所有Pod 

部署测试应用

kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get svc nginx # 获取访问端口 

访问测试:

curl http://<节点IP>:<NodePort> 

集群维护

升级集群

  1. 升级kubeadm:
sudo apt-get update && sudo apt-get install -y kubeadm=1.27.0-00 kubeadm version 
  1. 升级Master节点:
sudo kubeadm upgrade plan sudo kubeadm upgrade apply v1.27.0 
  1. 升级Worker节点:
kubectl drain <node> --ignore-daemonsets sudo kubeadm upgrade node sudo systemctl restart kubelet kubectl uncordon <node> 

备份与恢复

备份关键配置:

# 备份etcd sudo ETCDCTL_API=3 etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ snapshot save snapshot.db # 备份k8s配置 sudo cp -r /etc/kubernetes /backup/kubernetes-config sudo cp -r /var/lib/kubelet /backup/kubelet-data 

常见问题排查

  1. kubelet无法启动

    • 检查容器运行时状态:sudo systemctl status containerd
    • 查看日志:journalctl -xeu kubelet
  2. 节点NotReady

    • 检查网络插件是否正常运行:kubectl get pods -n kube-system
    • 验证网络连接:ping <其他节点IP>
  3. Pod卡在Pending状态

    • 查看事件:kubectl describe pod <pod-name>
    • 检查资源配额:kubectl describe nodes

总结

通过本文的详细步骤,您已经成功搭建了一个功能完整的Kubernetes集群。建议进一步: - 配置持久化存储(如NFS/CSI) - 安装监控系统(Prometheus+Grafana) - 配置日志收集(EFK/ELK) - 设置RBAC权限控制

Kubernetes的学习曲线较陡峭,建议通过官方文档和实际项目不断积累经验。Happy Kubernetes-ing! “`

注:实际使用时,请根据您的具体环境修改IP地址、版本号等参数。本文档假设使用Kubernetes 1.27版本,不同版本的具体命令可能略有差异。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

k8s
AI