Kubernetes容器集群管理环境 - 完整部署(中篇)
在上一篇关于Kubernetes容器集群管理环境部署的文章中,我们完成了一些基础的准备工作。在本篇(中篇)中,我们将继续深入,完成更多关键组件的部署和配置,让Kubernetes集群能够更加完善地运行起来。
目录#
- 安装etcd
- 安装Kubernetes Master组件
- 安装Kubernetes Node组件
- 网络插件部署
- 常见实践与最佳实践
1. 安装etcd#
1.1 下载etcd二进制文件#
ETCD_VERSION="v3.5.4"
wget https://github.com/etcd-io/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz
tar -xvf etcd-${ETCD_VERSION}-linux-amd64.tar.gz
cd etcd-${ETCD_VERSION}-linux-amd64
sudo cp etcd etcdctl /usr/local/bin/1.2 配置etcd服务#
创建/etc/systemd/system/etcd.service文件,内容如下:
[Unit]
Description=etcd
Documentation=https://github.com/coreos
[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
--name=etcd-node1 \
--data-dir=/var/lib/etcd \
--listen-peer-urls=http://<etcd-node-ip>:2380 \
--listen-client-urls=http://<etcd-node-ip>:2379,http://127.0.0.1:2379 \
--advertise-client-urls=http://<etcd-node-ip>:2379 \
--initial-cluster-token=etcd-cluster-1 \
--initial-cluster=etcd-node1=http://<etcd-node-ip>:2380 \
--initial-cluster-state=new
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target将<etcd-node-ip>替换为实际的etcd节点IP。
1.3 启动etcd服务#
sudo systemctl daemon-reload
sudo systemctl enable etcd
sudo systemctl start etcd2. 安装Kubernetes Master组件#
2.1 下载Kubernetes二进制文件#
K8S_VERSION="v1.24.0"
wget https://dl.k8s.io/${K8S_VERSION}/kubernetes-server-linux-amd64.tar.gz
tar -xvf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin
sudo cp kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/bin/2.2 配置kube-apiserver#
创建/etc/kubernetes/manifests/kube-apiserver.yaml文件(如果目录不存在需先创建),内容如下:
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
namespace: kube-system
spec:
containers:
- name: kube-apiserver
image: k8s.gcr.io/kube-apiserver:${K8S_VERSION}
command:
- kube-apiserver
- --advertise-address=<master-ip>
- --allow-privileged=true
- --authorization-mode=Node,RBAC
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --enable-admission-plugins=NodeRestriction
- --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
- --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
- --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
- --etcd-servers=http://<etcd-node-ip>:2379
- --service-account-key-file=/etc/kubernetes/pki/sa.pub
- --service-cluster-ip-range=10.96.0.0/12
- --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
- --tls-private-key-file=/etc/kubernetes/pki/apiserver.key将<master-ip>和<etcd-node-ip>替换为实际值。
2.3 配置kube-controller-manager#
创建/etc/kubernetes/manifests/kube-controller-manager.yaml文件:
apiVersion: v1
kind: Pod
metadata:
name: kube-controller-manager
namespace: kube-system
spec:
containers:
- name: kube-controller-manager
image: k8s.gcr.io/kube-controller-manager:${K8S_VERSION}
command:
- kube-controller-manager
- --bind-address=127.0.0.1
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --cluster-name=kubernetes
- --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
- --cluster-signing-key-file=/etc/kubernetes/pki/ca.key
- --kubeconfig=/etc/kubernetes/controller-manager.conf
- --leader-elect=true
- --root-ca-file=/etc/kubernetes/pki/ca.crt
- --service-account-private-key-file=/etc/kubernetes/pki/sa.key
- --use-service-account-credentials=true2.4 配置kube-scheduler#
创建/etc/kubernetes/manifests/kube-scheduler.yaml文件:
apiVersion: v1
kind: Pod
metadata:
name: kube-scheduler
namespace: kube-system
spec:
containers:
- name: kube-scheduler
image: k8s.gcr.io/kube-scheduler:${K8S_VERSION}
command:
- kube-scheduler
- --bind-address=127.0.0.1
- --kubeconfig=/etc/kubernetes/scheduler.conf
- --leader-elect=true3. 安装Kubernetes Node组件#
3.1 下载组件#
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl3.2 配置kubelet#
创建/var/lib/kubelet/config.yaml文件:
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd3.3 启动kubelet#
sudo systemctl enable kubelet
sudo systemctl start kubelet4. 网络插件部署(以Calico为例)#
4.1 下载Calico配置文件#
wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml4.2 部署Calico#
kubectl apply -f calico.yaml5. 常见实践与最佳实践#
5.1 高可用etcd#
- 生产环境建议部署至少3个etcd节点,形成集群,提高数据的可靠性和可用性。
- 定期备份etcd数据,可使用
etcdctl snapshot save命令。
5.2 安全配置#
- 为Kubernetes API Server配置RBAC(基于角色的访问控制),严格控制不同用户和服务账号的权限。
- 启用TLS加密,保护API通信安全。
5.3 监控与日志#
- 部署Prometheus和Grafana等监控工具,对Kubernetes集群的各项指标(如CPU、内存、Pod状态等)进行监控。
- 使用EFK(Elasticsearch + Fluentd + Kibana)或其他日志收集方案,集中管理容器日志。
示例用法#
查看节点状态#
kubectl get nodes部署一个简单应用#
创建nginx-deployment.yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80部署应用:
kubectl apply -f nginx-deployment.yaml