如何快速部署自建k8s集群

如何快速部署自建k8s集群

快速部署自建Kubernetes(K8s)集群的方法包括:使用工具如kubeadm、选择合适的基础设施、准备所需的节点、配置网络插件。Kubeadm是一个官方工具,能够快速且相对简单地部署K8s集群。本文将详细描述如何使用kubeadm工具来快速部署一个自建的K8s集群。

一、准备环境

在开始部署Kubernetes之前,需要准备好部署环境。首先,需要选择合适的基础设施,这可以是物理服务器、虚拟机或云服务器。每个节点需要至少2GB的RAM和2个CPU核心。为了确保集群的稳定性,还需要配置时间同步服务(如NTP)和设置主机名。其次,需要准备操作系统,Kubernetes官方推荐使用基于Linux的操作系统,如Ubuntu、CentOS等。

选择操作系统是至关重要的一步,因为不同的操作系统可能会有不同的配置和依赖。对于本教程,我们将使用Ubuntu 20.04 LTS版本。确保所有节点的操作系统版本和配置一致,以避免在部署过程中出现不必要的问题。

二、安装基础工具

在所有节点上安装Docker和kubeadm工具。Docker是Kubernetes使用的容器运行时,而kubeadm则是用于初始化集群的工具。首先,更新系统软件包并安装Docker:

sudo apt-get update

sudo apt-get install -y docker.io

接着,添加Kubernetes的APT源,并安装kubeadm、kubelet和kubectl:

sudo apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl

sudo curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sudo cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list

deb https://apt.kubernetes.io/ kubernetes-xenial main

EOF

sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl

为了确保kubelet和Docker在系统启动时自动启动,使用以下命令:

sudo systemctl enable docker

sudo systemctl enable kubelet

三、初始化主节点

在主节点上使用kubeadm初始化集群:

sudo kubeadm init --pod-network-cidr=192.168.0.0/16

这将生成一个命令和令牌,用于将工作节点加入集群。保存这些信息,以备后用。初始化完成后,配置kubectl工具以便管理集群:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

四、安装网络插件

Kubernetes需要一个网络插件来管理Pod之间的通信。我们将使用Calico作为网络插件。使用以下命令来安装Calico:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

安装完成后,验证所有Pod是否都在运行状态:

kubectl get pods --all-namespaces

五、加入工作节点

在工作节点上,使用在初始化主节点时生成的命令和令牌,将它们加入集群。例如:

sudo kubeadm join <master-node-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

每个工作节点都需要执行此命令。一旦工作节点加入集群,可以使用以下命令查看节点状态:

kubectl get nodes

六、部署应用程序

一旦集群部署完成,就可以开始部署应用程序了。创建一个简单的Nginx部署作为示例:

kubectl create deployment nginx --image=nginx

kubectl expose deployment nginx --port=80 --type=NodePort

使用以下命令查看服务的详细信息:

kubectl get svc

你将看到一个外部IP地址和端口,可以通过它们访问Nginx应用。

七、配置持久存储

为了在集群中使用持久存储,需要配置存储类和持久卷。在Kubernetes中,存储类(StorageClass)定义了存储的类型和属性。创建一个简单的存储类:

apiVersion: storage.k8s.io/v1

kind: StorageClass

metadata:

name: fast

provisioner: kubernetes.io/no-provisioner

volumeBindingMode: WaitForFirstConsumer

保存为storageclass.yaml文件并应用:

kubectl apply -f storageclass.yaml

接着,创建一个持久卷(PersistentVolume)和持久卷声明(PersistentVolumeClaim):

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv0001

spec:

capacity:

storage: 1Gi

accessModes:

- ReadWriteOnce

hostPath:

path: "/mnt/data"

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: pvc0001

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 1Gi

保存为persistentvolume.yaml文件并应用:

kubectl apply -f persistentvolume.yaml

八、配置集群监控

为了监控集群的性能和资源使用情况,建议安装Prometheus和Grafana。首先,创建一个命名空间用于监控:

kubectl create namespace monitoring

接着,使用Helm安装Prometheus和Grafana:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

helm repo update

helm install prometheus prometheus-community/prometheus --namespace monitoring

helm install grafana grafana/grafana --namespace monitoring

安装完成后,可以使用以下命令获取Grafana的登录密码:

kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

九、配置日志收集

为了收集和分析日志,建议使用EFK(Elasticsearch, Fluentd, Kibana)堆栈。首先,创建命名空间用于日志收集:

kubectl create namespace logging

然后,使用Helm安装Elasticsearch、Fluentd和Kibana:

helm repo add elastic https://helm.elastic.co

helm repo update

helm install elasticsearch elastic/elasticsearch --namespace logging

helm install fluentd stable/fluentd --namespace logging

helm install kibana elastic/kibana --namespace logging

安装完成后,可以通过Kibana访问和分析日志。

十、配置自动扩展

为了确保集群能够根据负载自动扩展,可以配置Horizontal Pod Autoscaler(HPA)。首先,确保Metrics Server已安装:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

接着,创建一个HPA示例:

apiVersion: autoscaling/v1

kind: HorizontalPodAutoscaler

metadata:

name: nginx-hpa

spec:

scaleTargetRef:

apiVersion: apps/v1

kind: Deployment

name: nginx

minReplicas: 1

maxReplicas: 10

targetCPUUtilizationPercentage: 50

保存为hpa.yaml文件并应用:

kubectl apply -f hpa.yaml

这样,当CPU使用率超过50%时,HPA将自动扩展Nginx部署。

十一、配置备份和恢复

为了确保数据安全,需要配置备份和恢复机制。可以使用Velero工具来备份和恢复Kubernetes资源和持久卷。首先,安装Velero CLI:

wget https://github.com/vmware-tanzu/velero/releases/download/v1.6.3/velero-v1.6.3-linux-amd64.tar.gz

tar -xvf velero-v1.6.3-linux-amd64.tar.gz

sudo mv velero-v1.6.3-linux-amd64/velero /usr/local/bin/

接着,配置存储用于备份,并安装Velero服务器:

velero install --provider aws --bucket <your-bucket> --secret-file <your-credentials-file> --backup-location-config region=<your-region>

这样,Velero将定期备份Kubernetes资源和持久卷,并在需要时进行恢复。

十二、配置安全策略

为了确保集群的安全,需要配置网络策略和Pod安全策略。创建一个简单的网络策略示例:

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

name: allow-nginx

spec:

podSelector:

matchLabels:

app: nginx

policyTypes:

- Ingress

ingress:

- from:

- podSelector:

matchLabels:

app: nginx

ports:

- protocol: TCP

port: 80

保存为networkpolicy.yaml文件并应用:

kubectl apply -f networkpolicy.yaml

创建一个Pod安全策略示例:

apiVersion: policy/v1beta1

kind: PodSecurityPolicy

metadata:

name: restricted

spec:

privileged: false

seLinux:

rule: RunAsAny

supplementalGroups:

rule: RunAsAny

runAsUser:

rule: MustRunAsNonRoot

fsGroup:

rule: RunAsAny

volumes:

- 'configMap'

- 'emptyDir'

- 'secret'

保存为podsecuritypolicy.yaml文件并应用:

kubectl apply -f podsecuritypolicy.yaml

十三、配置高可用性

为了确保集群的高可用性,需要配置多个主节点和etcd节点。首先,初始化第一个主节点并配置etcd集群:

sudo kubeadm init --control-plane-endpoint "<load-balancer-dns>:6443" --upload-certs --pod-network-cidr=192.168.0.0/16

接着,记录初始化命令和证书信息,并在其他主节点上执行:

sudo kubeadm join <load-balancer-dns>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane --certificate-key <certificate-key>

这样,多个主节点将共享负载,提高集群的可用性。

十四、总结和展望

快速部署自建K8s集群涉及多个步骤,包括准备环境、安装基础工具、初始化主节点、安装网络插件、加入工作节点、部署应用程序、配置持久存储、监控、日志收集、自动扩展、备份和恢复、安全策略以及高可用性配置。通过详细的步骤和示例代码,可以快速高效地部署一个功能齐全的K8s集群。未来,可以进一步优化集群性能、提高安全性以及实现更多自动化操作。

相关问答FAQs:

如何快速部署自建k8s集群?

在现代软件开发和部署中,Kubernetes(K8s)被广泛应用于容器编排和管理。自建K8s集群能够帮助团队更好地控制和管理应用程序的生命周期。本文将为您提供详细的步骤和实践,以帮助您快速部署自建K8s集群。

1. 准备工作

在开始部署K8s集群之前,需要确保您具备以下条件:

  • 硬件要求:至少需要一台主机作为K8s的控制平面节点,另外还需要至少一台工作节点。推荐使用多台虚拟机或物理机。
  • 操作系统:建议使用支持的Linux发行版,如Ubuntu、CentOS或Debian。
  • 网络设置:确保节点之间能够互相通信,并配置好防火墙规则。
  • 基础工具:需要安装Docker(或其他容器运行时)以及kubectl命令行工具。

2. 安装Docker

Docker是K8s的核心组件之一,首先需要在每个节点上安装Docker。

对于Ubuntu系统,可以使用以下命令进行安装:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce

安装完成后,使用以下命令验证Docker是否安装成功:

sudo systemctl start docker
sudo systemctl enable docker
docker --version

3. 安装Kubernetes组件

接下来,您需要在每个节点上安装K8s的组件,包括kubeadmkubeletkubectl

对于Ubuntu系统,使用以下命令安装K8s组件:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

安装完成后,使用以下命令验证K8s是否安装成功:

kubectl version --client

4. 初始化K8s集群

在主节点上执行以下命令,以初始化K8s集群:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

初始化完成后,会输出一段命令,用于将工作节点加入到集群中。请将其保存,以便后续操作。

为了让非root用户也可以使用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. 安装网络插件

K8s集群需要一个网络插件来实现Pod之间的通信。Flannel是一个常用的网络插件,可以使用以下命令安装:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel.yml

6. 加入工作节点

在工作节点上,使用在初始化时保存的命令,加入到K8s集群。例如:

kubeadm join <控制平面节点IP>:<API端口> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

7. 验证集群状态

在主节点上,使用以下命令检查集群状态,确认所有节点均已成功加入:

kubectl get nodes

8. 部署应用程序

一旦集群搭建完成,您就可以开始部署应用程序。以下是一个简单的示例,展示如何在K8s中部署一个nginx应用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

使用以下命令部署该应用:

kubectl apply -f nginx-deployment.yaml

9. 访问应用程序

为了访问您部署的nginx应用,您需要暴露该服务。可以创建一个Service来实现:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30001
  selector:
    app: nginx

使用以下命令创建Service:

kubectl apply -f nginx-service.yaml

通过访问任意工作节点的IP地址和NodePort(在本例中为30001),您就可以访问nginx服务。

10. 监控与管理

成功部署K8s集群后,您可以使用多种工具来监控和管理集群,例如Grafana、Prometheus等。这些工具可以帮助您实时监控集群的性能、资源使用情况以及应用的健康状态。

结论

部署自建K8s集群虽然需要一些前期准备和配置,但一旦成功,您将能够更灵活地管理和扩展应用程序。K8s的强大功能能够为您的DevOps流程带来极大的便利。通过上述步骤,您可以快速搭建起一个K8s集群,并开始享受其带来的好处。

关于 GitLab 的更多内容,可以查看官网文档:
官网地址: https://gitlab.cn 
文档地址: https://docs.gitlab.cn 
论坛地址: https://forum.gitlab.cn 

原创文章,作者:xiaoxiao,如若转载,请注明出处:https://devops.gitlab.cn/archives/49619

(0)
xiaoxiaoxiaoxiao
上一篇 2024 年 7 月 24 日
下一篇 2024 年 7 月 24 日

相关推荐

  • k8s如何添加多个网站

    在Kubernetes(K8s)中添加多个网站的关键步骤包括创建多个部署和服务、配置Ingress资源、使用命名空间进行隔离。其中,配置Ingress资源是至关重要的一步,通过配置…

    2024 年 7 月 26 日
    0
  • k8s中如何查看dns信息

    在Kubernetes(k8s)中查看DNS信息可以通过以下几种方式:使用kubectl命令查看kube-dns/coredns日志、通过kubectl exec命令进入Pod查看…

    2024 年 7 月 26 日
    0
  • k8s应用如何获取集群信息

    K8s应用获取集群信息的方法有多种:通过Kubernetes API、使用kubectl命令行工具、配置文件和环境变量。其中,通过Kubernetes API获取信息最为常见,因为…

    2024 年 7 月 26 日
    0
  • 如何从rancher导出k8s配置

    要从Rancher导出Kubernetes配置,可以通过使用Rancher UI导出、使用kubectl命令行工具导出、使用Rancher API导出三种主要方式实现。使用Ranc…

    2024 年 7 月 26 日
    0
  • k8s一台服务器怎么搭建

    要在一台服务器上搭建Kubernetes (K8s),需要完成以下几步:安装Docker、配置Kubernetes仓库、安装Kubeadm、Kubelet和Kubectl、初始化K…

    2024 年 7 月 26 日
    0
  • k8s怎么保证容器重启数据不丢失

    在Kubernetes(K8s)环境中,保证容器重启数据不丢失的核心措施有:使用持久卷(Persistent Volume, PV)、配置持久卷声明(Persistent Volu…

    2024 年 7 月 26 日
    0
  • k8s怎么设置双向认证

    K8s可以通过配置API Server和集群节点的证书及密钥来实现双向认证,这包括生成和配置客户端证书、配置API Server以信任这些证书、在kubelet和kubectl中配…

    2024 年 7 月 26 日
    0
  • 企业k8s怎么管理的

    企业Kubernetes(K8s)管理的核心在于自动化、可扩展性、安全性、监控和日志管理。其中,自动化是实现高效管理的关键。通过自动化工具和脚本,企业可以大大简化Kubernete…

    2024 年 7 月 26 日
    0
  • k8s怎么启动容器

    要在Kubernetes(k8s)中启动容器,可以通过创建Pod、Deployment、Service等资源对象来实现,这些资源对象通过YAML文件进行定义,并使用kubectl命…

    2024 年 7 月 26 日
    0
  • 如何向k8s集群提交作业

    要向Kubernetes集群提交作业,可以通过kubectl命令、配置YAML文件、以及使用Helm或Operator等工具。 通过kubectl命令可以直接与K8s API交互,…

    2024 年 7 月 26 日
    0

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

GitLab下载安装
联系站长
联系站长
分享本页
返回顶部