优化Debian上的K8s部署可以从多个方面入手,包括基础配置、网络优化、安全性增强、性能调优等。以下是一些详细的步骤和建议:
设置主机名和hosts文件:
在所有节点上设置主机名,并配置 /etc/hosts
文件以确保节点之间的相互解析。
关闭swap:
关闭swap以释放内存资源,可以通过以下命令实现:
sudo swapoff -a
sudo sed -i '/ swap / s/1/g' /etc/fstab
配置网络:
配置网络参数以优化网络性能,例如:
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
安装containerd:
在所有节点上安装containerd作为容器运行时:
sudo apt update
sudo apt install -y containerd
sudo systemctl enable --now containerd.service
配置Kubernetes源:
添加Kubernetes的apt源以加速安装:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb [arch=amd64] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
关闭防火墙:
临时关闭防火墙以简化配置:
sudo systemctl stop firewalld
sudo systemctl disable firewalld
禁用SELinux:
临时禁用SELinux:
sudo setenforce 0
永久禁用SELinux:
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
配置RBAC:
实施基于角色的访问控制(RBAC)以限制对Kubernetes API的访问:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
subjects:
- kind: ServiceAccount
name: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
资源请求和限制:
为Pod设置合理的资源请求和限制,以优化资源分配:
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
使用高性能网络插件:
例如,使用Calico作为网络插件:
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
kubectl apply -f calico.yaml
监控和日志管理:
使用Prometheus和Grafana进行监控,使用ELK Stack进行日志管理:
apiVersion: monitoring.coreos.com/v1
kind: Pod
metadata:
name: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus:latest
ports:
- containerPort: 9090
---
apiVersion: logging.k8s.io/v1
kind: ConfigMap
metadata:
name: logging
data:
fluent.conf: |
<fluentd configuration>
使用ConfigMap和Secret:
使用ConfigMap存储非敏感配置数据,使用Secret存储敏感信息:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
key1: value1
key2: value2
---
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
key1: c2VjcmV0VmFsdWU= # base64编码的敏感信息
自动化部署:
使用Kubeadm进行自动化部署,并通过Kubernetes的声明式配置管理资源:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
通过上述步骤和建议,可以有效地优化Debian上的K8s部署,提高集群的性能、安全性和可管理性。