本篇博客将详细介绍如何在云服务器上搭建 Kubernetes 1.19 集群,以及在我们部署好的集群上使用 部署环境
目录
1. 搭建 Kubernetes 1.19 集群我的master节点设定为4核8gb的机器,这里称其为master,另一台机称为worker。 Step 1: 进入root用户的身份(master)su 输入root的密码即可。 Step 2: 安装docker(master和worker都要操作)关于 docker 的安装建议参考官方文档. 这里给出快速安装的脚本: curl -fsSL https://get. | sudo sh -s -- --mirror Aliyun sudo usermod -aG docker $USER sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "registry-mirrors": ["https://t9ab0rkd.mirror."] } EOF sudo systemctl daemon-reload sudo systemctl restart docker Step3: 安装 Kubernetes 三件套: kubelet kubeadm kubectl(仅在master)# 添加并信任APT证书 curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - # 添加源地址 add-apt-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" # 更新源并安装最新版 kubenetes sudo apt update && apt install -y kubelet kubeadm kubectl # 添加 completion,最好放入 .bashrc 中 source <(kubectl completion bash) source <(kubeadm completion bash) Step4: 关闭 swap(master和worker都要操作)这里由于腾讯云主机是默认关闭 swap 的,如果是其他主机,则执行以下操作并重启机器: $ vim /etc/fstab // 注释掉带有swap的一行 # UUID=xxxxxxxxx none swap sw 0 0 Step5: 启动 master(仅在master操作)kubeadm init --image-repository='registry.cn-hangzhou./google_containers' 这里指定了镜像源为阿里云,所以能够避免从 kubeadm join 172.16.0.15:6443 --token qi9srp.7sudphpyhmkm8sw6 --discovery-token-ca-cert-hash sha256:a30870d86f7d19aff4d57a2dd64d58736012dfa3b3d5b53c0e45413ba8f039bf 这串信息稍后会在加入worker节点的时候用到。 Step6: 配置读取路径(仅在master操作)export KUBECONFIG=/etc/kubernetes/admin.conf Step7:安装网络插件(仅在master操作)kubectl apply -f "https://cloud.s/k8s/net?k8s-version=$(kubectl version | base64 | tr -d 'n')" Step8:将 worker 节点加入到集群(仅在worker 操作)如果有保存在master节点执行 kubeadm join 172.16.0.15:6443 --token qi9srp.7sudphpyhmkm8sw6 --discovery-token-ca-cert-hash sha256:a30870d86f7d19aff4d57a2dd64d58736012dfa3b3d5b53c0e45413ba8f039bf 可以直接复制过来使用. 没有保存的话, openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | sha256sum | awk '{print $1}' Step9: 验证执行结果2. 通过 yaml 文件部署前后端应用由于服务计算的第九次作业开发了一个前后端分离的应用程序,并打包成了 docker 镜像,所以正好可以利用搭建好的集群部署前后端应用。查阅了 Kubernetes 官方文档后,我决定分别为前后端服务配置一个 bbs_backend 的部署DeploymentapiVersion: apps/v1 kind: Deployment metadata: name: bbs-backend spec: selector: matchLabels: app: bbs-backend tier: backend track: stable replicas: 3 # 副本数 template: metadata: labels: app: bbs-backend tier: backend track: stable spec: containers: - name: bbs-backend image: "docker.io/bobbai/bbs_backend" # 这里pod要拉取的镜像 ports: - name: port containerPort: 5000 # 这里指定了基于镜像创建容器之后服务所在的端口 ServiceapiVersion: v1 kind: Service metadata: name: bbs-backend-service spec: selector: app: bbs_backend tier: backend ports: - protocol: "TCP" # 服务提供的协议 port: 5000 # service暴露在cluster ip上的端口,<cluster ip>:port 是提供给集群内部客户访问service的入口。 targetPort: 5000 # targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器 nodePort: 30086 # 暴露在公网的端口,服务可以通过 <master ip>:nodePort 访问 type: NodePort bbs_frontend 的部署这里yaml文件与后端部署所用到的类似,不再重复,直接上文件: apiVersion: apps/v1 kind: Deployment metadata: name: bbs-frontend spec: selector: matchLabels: app: bbs-frontend tier: frontend track: stable replicas: 3 template: metadata: labels: app: bbs-frontend tier: frontend track: stable spec: containers: - name: bbs-frontend image: "docker.io/bobbai/bbs_frontend:k8s" ports: - name: port containerPort: 3000 --- apiVersion: v1 kind: Service metadata: name: bbs-frontend-service spec: selector: app: bbs-frontend tier: frontend ports: - protocol: "TCP" port: 3000 targetPort: 3000 nodePort: 30087 type: NodePort 执行: kubectl apply -f bbs_backend -n bbs kubectl apply -f bbs_frontend -n bbs 后,可以通过 dashboard 查看服务是否部署成功: 3. Gitlab 的 Helm 部署Gitlab 是什么?Gitlab 是一个非常著名的开源项目管理工具。除了具有管理进度,项目版本等基本功能之外,gitlab还附带有一个强大的 CI/CD 系统,这使得项目的自动化测试,部署变得十分方便。 为什么要是用 (1) Gitlab 的 Helm 部署step1: 添加 helm 源(在master执行)helm repo add stable https://kubernetes-charts.storage. helm repo add aliyun https://kubernetes.oss-cn-hangzhou./charts helm repo add apphub https://apphub./ step2: 下载 gitlab-ce 的 chartshelm pull stable/gitlab-ce // 目录下会生成一个 gitlab-ce-版本号的压缩包,通过tar命令解压即可 tar -zxvf gitlab-ce-xxx.tgz 解压后应当生成了一个名为 step3: 进入解压后的目录,并根据需求修改 values.yaml 文件cd gitlab-ce vim values.yaml
step4:适配 1.19 集群(如果您的集群是1.16版本之前的,则这一步可以忽略)kubernetes 每个版本的yaml文件版本都有所不同,需要我们根据自己集群的版本进行适配,即修改 helm/template 中的一些 yaml 文件。
添加:
添加:
step5:创建 PersistentVolume由于gitlab需要将 postgres, redis 的数据持久化,因此如果此时根据gitlab-ce的charts来创建服务,由于我们并没有声明对应到gitlab自带的 PersistentVolumeClaim 对应的挂载目录下的 PersistentVolume, 服务就无法正常启动。因此,我们首先创建四个文件夹: mkdir -p /data/gitlab/pv{1..4} 然后创建4个声明pv的yaml文件,模版如下: --- apiVersion: v1 kind: PersistentVolume metadata: name: gitlab-pv1 namespace: gitlab spec: accessModes: - ReadWriteOnce capacity: storage: 10Gi hostPath: path: /data/gitlab/pv1 persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem 然后依次 apply 这些 yaml 文件: kubectl apply -f pv1.yaml kubectl apply -f pv2.yaml kubectl apply -f pv3.yaml kubectl apply -f pv4.yaml 随后查看 pv 的状态 step6:创建服务输入: helm install gitlab gitlab-ce -n gitlab 这里,-n 参数指定了服务的命名空间,您可以根据需求自行更改。 查看服务状态: |
|