優化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部署,提高集群的性能、安全性和可管理性。