ubuntu24.04 k8s安装部署
时间: 2025-07-12 16:05:50 浏览: 10
在 Ubuntu 24.04 上安装和部署 Kubernetes(k8s)需要遵循一系列步骤,以确保系统环境的正确配置和组件的顺利安装。以下是基于最佳实践整理出的完整指南。
### 一、环境准备
#### 1. 系统初始化
- 更新系统软件包:
```bash
sudo apt update && sudo apt upgrade -y
```
- 安装必要的依赖项:
```bash
sudo apt install -y curl gnupg2 software-properties-common
```
#### 2. 安装容器运行时(containerd)
- 添加 Docker 的官方 GPG 密钥并设置仓库:
```bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```
- 更新 APT 包索引并安装 containerd:
```bash
sudo apt update && sudo apt install -y containerd.io
```
- 配置 containerd:
```bash
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
```
- 重启 containerd 服务:
```bash
sudo systemctl restart containerd
```
#### 3. 安装 Kubernetes 组件(kubeadm, kubelet, kubectl)
- 添加 Kubernetes 的官方 GPG 密钥并设置仓库:
```bash
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
```
- 安装 Kubernetes 组件:
```bash
sudo apt update && sudo apt install -y kubelet kubeadm kubectl
```
- 锁定版本以防止意外升级:
```bash
sudo apt-mark hold kubelet kubeadm kubectl
```
### 二、部署 Kubernetes 集群
#### 1. 初始化主节点
- 使用 `kubeadm init` 命令初始化主节点,该命令会自动检测网络插件,并生成一个用于加入其他节点的 token:
```bash
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
```
- 按照输出提示设置用户权限:
```bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```
#### 2. 添加工作节点
- 在每个工作节点上执行以下命令来加入集群(具体命令由主节点初始化时输出提供):
```bash
sudo kubeadm join <control-plane-ip>:<port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
```
#### 3. 验证集群状态
- 查看节点状态:
```bash
kubectl get nodes
```
- 查看所有命名空间下的 Pod 状态:
```bash
kubectl get pods --all-namespaces
```
### 三、部署应用示例
#### 1. 创建 Deployment
- 创建一个简单的 Nginx Deployment:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
```
- 应用配置文件:
```bash
kubectl apply -f nginx-deployment.yaml
```
#### 2. 创建 Service
- 创建一个 ClusterIP 类型的服务来暴露 Deployment:
```yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
```
- 应用配置文件:
```bash
kubectl apply -f nginx-service.yaml
```
#### 3. 部署应用
- 验证 Deployment 和 Service 是否成功创建:
```bash
kubectl get deployments
kubectl get services
```
### 四、运维管理
#### 1. 资源监控
- 可以使用 Prometheus 和 Grafana 来监控 Kubernetes 集群中的资源使用情况。
- 安装 Prometheus Operator:
```bash
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
```
#### 2. 日志管理
- 使用 Fluentd 或 Logstash 收集日志,并通过 Elasticsearch 存储和搜索日志数据。
- 安装 EFK 堆栈:
```bash
helm repo add elastic https://helm.elastic.co
helm repo update
helm install elasticsearch elastic/elasticsearch
helm install kibana elastic/kibana
helm install fluentd fluent/fluentd
```
#### 3. 自动扩缩容
- 使用 Horizontal Pod Autoscaler (HPA) 根据 CPU 使用率自动调整 Pod 数量:
```bash
kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=1 --max=10
```
### 五、生产级最佳实践
#### 1. 高可用控制平面
- 部署多个主节点以实现高可用性,并使用负载均衡器分发请求。
- 使用 Keepalived 或 HAProxy 设置虚拟 IP 地址。
#### 2. 持久化存储
- 使用 Persistent Volumes (PV) 和 Persistent Volume Claims (PVC) 提供持久化存储。
- 配置 StorageClass 以便动态分配存储卷。
#### 3. 安全加固
- 启用 RBAC 并限制用户的访问权限。
- 使用 Network Policies 控制 Pod 之间的通信。
### 六、备份与灾难恢复
#### 1. 备份 etcd 数据
- 定期备份 etcd 数据库以防止数据丢失:
```bash
ETCDCTL_API=3 etcdctl --endpoints=https://[ETCD_IP]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /opt/snapshot-pre-boot.db
```
#### 2. 恢复 etcd 数据
- 如果发生故障,可以从快照恢复 etcd 数据:
```bash
ETCDCTL_API=3 etcdctl snapshot restore /opt/snapshot-pre-boot.db --data-dir /var/lib/etcd-backup
sudo mv /var/lib/etcd /var/lib/etcd-old
sudo mv /var/lib/etcd-backup /var/lib/etcd
sudo chown -R etcd:etcd /var/lib/etcd
sudo systemctl start etcd
```
### 七、常见问题排查
#### 1. Pod 处于 Pending 状态
- 检查节点资源是否充足,或者查看是否有调度策略阻止了 Pod 的调度。
#### 2. 服务无法访问
- 确认服务类型是否正确(如 NodePort 或 LoadBalancer),并且检查防火墙规则是否允许流量通过。
阅读全文