K8s裸机部署可以通过以下步骤实现:准备物理服务器、安装操作系统、配置网络、安装容器运行时、安装Kubernetes组件、初始化集群、加入节点。其中,准备物理服务器和安装Kubernetes组件是部署过程中最重要的环节。物理服务器的选择直接影响集群的性能和稳定性,建议选择性能较高的服务器并确保硬件兼容。安装Kubernetes组件需要注意版本的匹配和依赖关系,以保证集群的正常运行。
一、准备物理服务器、安装操作系统
部署K8s裸机集群的第一步是准备合适的物理服务器。每个节点的配置应尽量统一,推荐至少具有以下配置:
- CPU:4核以上
- 内存:8GB以上
- 硬盘:100GB以上
- 网络:千兆以太网
确保所有服务器具有相同的操作系统版本,例如Ubuntu 20.04 LTS或CentOS 7/8。安装操作系统时,关闭防火墙和SELinux,并配置静态IP地址。
详细步骤:
- 从官网下载操作系统镜像。
- 使用USB或PXE方式引导安装操作系统。
- 关闭防火墙:
sudo systemctl disable firewalld
和sudo systemctl stop firewalld
。 - 关闭SELinux:编辑
/etc/selinux/config
文件,将SELINUX=enforcing
改为SELINUX=disabled
。 - 设置静态IP:编辑
/etc/netplan/
(Ubuntu)或/etc/sysconfig/network-scripts/
(CentOS)。
二、配置网络
配置网络是K8s集群正常通信的基础,确保所有节点在同一局域网内,并且可以相互通信。推荐配置一个内网DNS服务器,以便节点通过主机名相互访问。
详细步骤:
- 确保所有节点可以通过ping命令相互访问。
- 配置/etc/hosts文件,将所有节点的IP地址和主机名添加进去:
192.168.1.101 master
192.168.1.102 worker1
192.168.1.103 worker2
三、安装容器运行时
Kubernetes默认使用Containerd作为容器运行时,也可以选择其他兼容的运行时如Docker。以安装Containerd为例:
详细步骤:
- 更新系统包列表:
sudo apt-get update
或sudo yum update
- 安装Containerd:
sudo apt-get install -y containerd
或sudo yum install -y containerd
- 配置Containerd:编辑
/etc/containerd/config.toml
文件,启用Systemd Cgroup驱动:[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
- 重启Containerd服务:
sudo systemctl restart containerd
四、安装Kubernetes组件
Kubernetes组件包括kubeadm、kubelet和kubectl。使用kubeadm可以简化集群的安装和管理。
详细步骤:
-
添加Kubernetes包源:
- Ubuntu:
sudo apt-get update
sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
- CentOS:
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
- Ubuntu:
-
安装kubeadm、kubelet和kubectl:
- Ubuntu:
sudo apt-get install -y kubelet kubeadm kubectl
- CentOS:
sudo yum install -y kubelet kubeadm kubectl
- Ubuntu:
-
启用kubelet:
sudo systemctl enable kubelet
并启动sudo systemctl start kubelet
五、初始化集群
初始化集群是部署K8s的核心步骤,使用kubeadm可以快速初始化Kubernetes控制平面。
详细步骤:
-
在主节点执行以下命令初始化集群:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
-
配置kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
安装Pod网络插件(以Flannel为例):
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
六、加入节点
将其他物理服务器作为工作节点加入K8s集群,确保它们能够与主节点通信。
详细步骤:
-
在每个工作节点上执行kubeadm join命令,使用从主节点kubeadm init输出的命令:
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
-
确认节点成功加入:
kubectl get nodes
七、验证集群
集群初始化和节点加入完成后,验证K8s集群是否正常运行。
详细步骤:
-
检查所有节点的状态:
kubectl get nodes
-
确认所有Pod状态:
kubectl get pods --all-namespaces
-
部署一个测试应用,例如nginx:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
通过以上步骤,您可以成功在裸机环境中部署一个功能完整的Kubernetes集群。确保每一步都严格按照要求进行,以避免后续可能出现的各种问题。
相关问答FAQs:
FAQ 1: 如何在裸机上部署 Kubernetes 集群?
裸机部署 Kubernetes(k8s)涉及将 Kubernetes 集群直接安装在物理服务器上,而不依赖虚拟化层。此过程通常包括以下几个步骤:准备环境、安装操作系统、配置网络、安装 Kubernetes 组件等。
首先,您需要选择适合的操作系统并在裸机服务器上进行安装。常见的选择包括 Ubuntu、CentOS 和 Debian。确保所有节点(主节点和工作节点)都能通过网络互联,并具备足够的资源(如 CPU、内存和存储)。
接下来,配置网络是关键步骤之一。这通常涉及设置 DNS、确保所有节点的主机名解析正常,并配置防火墙规则以允许 Kubernetes 所需的端口(如 6443、2379-2380、10250-10255 等)开放。
完成操作系统安装和网络配置后,可以选择使用工具如 kubeadm 进行 Kubernetes 集群的初始化。kubeadm 是 Kubernetes 官方提供的工具,简化了集群的创建过程。通过 kubeadm init 命令在主节点上初始化集群,并使用 kubeadm join 命令将工作节点加入到集群中。
另外,您还需要安装一个容器运行时环境(如 Docker 或 containerd),以及 Kubernetes 的网络插件(如 Calico 或 Flannel),以确保集群内部的网络通信和服务发现功能正常运行。
FAQ 2: 部署 Kubernetes 时如何管理裸机的存储?
在裸机环境下部署 Kubernetes 时,存储管理是一个重要的考虑因素。您可以通过多种方式来管理存储,以满足不同的需求。
一种常见的方法是使用网络附加存储(NAS)或存储区域网络(SAN)。这些解决方案可以提供可靠的存储资源,并通过网络与裸机服务器连接。Kubernetes 支持通过 Persistent Volumes (PV) 和 Persistent Volume Claims (PVC) 机制来管理这些存储资源。您可以在集群中配置 PV,并通过 PVC 请求这些存储资源,确保数据的持久性和可用性。
另一种选择是使用本地存储,即将存储直接挂载到裸机服务器的本地磁盘上。这种方法通常适用于需要高性能或低延迟存储的应用场景。Kubernetes 支持 Local Volumes,您可以在集群配置中定义本地存储,并将其分配给 Pods。
无论选择哪种存储方式,都需要配置 Kubernetes 的存储类(StorageClass)来定义存储的参数,如访问模式、存储容量等。这有助于 Kubernetes 根据应用的需求自动选择合适的存储资源。
FAQ 3: 在裸机环境中部署 Kubernetes 时,如何处理安全性和监控?
在裸机环境中部署 Kubernetes 集群时,确保集群的安全性和监控功能正常运行是至关重要的。
首先,安全性方面,建议采取以下措施:定期更新操作系统和 Kubernetes 组件,使用强密码和多因素认证,限制网络访问并使用防火墙规则保护集群。Kubernetes 提供了多种安全功能,如 Role-Based Access Control (RBAC) 和 Network Policies,这些可以帮助您定义和管理集群中的访问权限和网络流量。
另外,您还可以使用工具如 kube-bench 和 kube-hunter 来评估集群的安全性并发现潜在的漏洞。定期进行安全审计和漏洞扫描也是必要的,以保持集群的安全性。
对于监控,Kubernetes 本身提供了内置的监控工具,如 Kubernetes Dashboard 和 kubectl top,但这些工具的功能可能有限。为了获得更全面的监控数据,建议使用外部监控工具,如 Prometheus 和 Grafana。Prometheus 可以收集和存储来自 Kubernetes 集群的指标数据,而 Grafana 可以用来创建和展示丰富的监控面板。
另外,您还可以配置日志管理工具,如 ELK Stack(Elasticsearch、Logstash、Kibana)或 Loki,以便于集中管理和分析日志数据。这些工具可以帮助您及时发现和排查集群中的问题,确保集群的稳定性和性能。
关于 GitLab 的更多内容,可以查看官网文档:
官网地址: https://gitlab.cn
文档地址: https://docs.gitlab.cn
论坛地址: https://forum.gitlab.cn
原创文章,作者:DevSecOps,如若转载,请注明出处:https://devops.gitlab.cn/archives/53249