Kubernetes安装部署
大约 5 分钟Kubernetes指南Kubernetes安装部署
Kubernetes安装部署
Kubernetes安装方式
Kubernetes提供了多种安装方式,适用于不同的使用场景和环境需求。选择合适的安装方式对于集群的成功部署至关重要。
主要安装方式
1. kubeadm(推荐)
kubeadm是官方推荐的Kubernetes集群部署工具,简化了集群的创建和管理过程。
环境准备
系统要求:
- Ubuntu 16.04+、Debian 9+、CentOS 7+、RHEL 7+
- 2GB以上内存
- 2个以上CPU核心
- 网络连通性
节点规划:
控制平面节点:192.168.10.100 (k8s-master)
工作节点1:192.168.10.101 (k8s-worker1)
工作节点2:192.168.10.102 (k8s-worker2)
安装步骤
1. 系统初始化
# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 关闭SELinux
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 关闭swap
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
# 配置内核参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
2. 安装容器运行时
# 安装Docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start docker
# 配置Docker daemon.json
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl restart docker
3. 安装kubeadm、kubelet和kubectl
# 配置Kubernetes源
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
exclude=kubelet kubeadm kubectl
EOF
# 安装组件
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
4. 初始化控制平面
# 拉取所需镜像
sudo kubeadm config images pull
# 初始化控制平面
sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.10.100 \
--kubernetes-version=v1.21.0
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5. 配置网络插件
# 安装Flannel网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
6. 添加工作节点
# 在控制平面节点获取加入命令
kubeadm token create --print-join-command
# 在工作节点执行加入命令
sudo kubeadm join 192.168.10.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2. 二进制安装
二进制安装方式提供了最大的灵活性,但配置复杂度较高。
安装步骤
1. 下载二进制文件
# 下载Kubernetes二进制文件
wget https://dl.k8s.io/v1.21.0/kubernetes-server-linux-amd64.tar.gz
tar -zxvf kubernetes-server-linux-amd64.tar.gz
2. 配置证书
# 生成CA证书
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=kubernetes" -days 10000 -out ca.crt
3. 配置各组件
需要手动配置API Server、etcd、Controller Manager、Scheduler等组件的systemd服务文件。
3. Minikube(开发测试)
Minikube是用于本地开发测试的单节点Kubernetes集群。
安装步骤
# 安装Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 启动Minikube
minikube start
# 验证安装
kubectl cluster-info
4. 云平台托管服务
各大云平台都提供了托管的Kubernetes服务:
- Google Kubernetes Engine (GKE)
- Amazon Elastic Kubernetes Service (EKS)
- Azure Kubernetes Service (AKS)
- 阿里云Kubernetes服务 (ACK)
- 腾讯云Kubernetes服务 (TKE)
集群配置优化
1. 高可用部署
控制平面高可用:
# 多控制平面节点部署
kubeadm init --control-plane-endpoint "LOAD_BALANCER_IP:LOAD_BALANCER_PORT" \
--upload-certs
etcd集群部署:
# 外部etcd集群配置
kubeadm init --config=kubeadm-config.yaml
2. 网络插件选择
Calico(推荐):
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Cilium:
kubectl create -f https://raw.githubusercontent.com/cilium/cilium/v1.10/install/kubernetes/quick-install.yaml
3. 存储配置
本地存储:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
网络存储(NFS):
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: nfs-server.example.com
path: "/data"
集群安全配置
1. RBAC配置
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
2. 网络策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
3. 安全上下文
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
containers:
- name: sec-ctx-demo
image: busybox
securityContext:
allowPrivilegeEscalation: false
集群监控和日志
1. 监控部署
Metrics Server:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Prometheus:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack
2. 日志收集
EFK Stack:
# 部署Elasticsearch
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/es-service.yaml
# 部署Fluentd
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml
# 部署Kibana
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/kibana-service.yaml
集群维护
1. 节点维护
# 腾空节点
kubectl drain node-name --ignore-daemonsets
# 节点维护完成
kubectl uncordon node-name
2. 版本升级
# 升级kubeadm
sudo yum update kubeadm
# 查看升级计划
sudo kubeadm upgrade plan
# 执行升级
sudo kubeadm upgrade apply v1.22.0
3. 备份恢复
# 备份etcd
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 /tmp/snapshot.db
# 恢复etcd
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 restore /tmp/snapshot.db
常见问题及解决方案
1. 镜像拉取失败
# 配置镜像加速器
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
EOF
sudo systemctl restart docker
2. 网络插件问题
# 检查网络插件状态
kubectl get pods -n kube-system
# 重新应用网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
3. 节点NotReady状态
# 检查节点状态
kubectl describe node node-name
# 重启kubelet
sudo systemctl restart kubelet
验证集群安装
# 查看集群信息
kubectl cluster-info
# 查看节点状态
kubectl get nodes
# 部署测试应用
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pods,services
总结
Kubernetes的安装部署需要根据实际需求选择合适的方案。对于生产环境,建议使用kubeadm进行高可用部署,并配置合适的网络插件、存储方案和安全策略。定期维护和监控集群状态,确保集群的稳定运行。