跳到主要内容

2 篇博文 含有标签「k8s」

查看所有标签

minio节点迁移

· 阅读需 2 分钟
老司机
Maintainer of this proj

minio节点迁移

1. 备份

dir=/data
mc mirror minio/ $dir/backup/minio_backup.$time --overwrite

2. 重建 pv

mkdir -p $dir/backup/minio_${minio_pod}_$time
cd $dir/backup/minio_${minio_pod}_$time
kubectl get pod ${minio_pod} -n ${minio_namespace} -o yaml > minio-pod-${minio_pod}.yaml
minio_pvc=$(kubectl describe pod ${minio_pod} -n ${minio_namespace} | grep ClaimName | awk '{print $NF}')
echo ${minio_pvc}
kubectl get pvc ${minio_pvc} -n ${minio_namespace} -o yaml > minio-pvc-${minio_pvc}.yaml
minio_pv=$(kubectl describe pvc ${minio_pvc} -n ${minio_namespace} | grep Volume: | awk '{print $NF}')
echo ${minio_pv}
local_dir=$(kubectl describe pv ${minio_pv} -n ${minio_namespace} | grep Path | awk '{print $NF}')
echo ${local_dir}

# 备份pv
kubectl get pv ${minio_pv} -o yaml > minio-pv-${minio_pv}.yaml
# 编辑
cp minio-pv-${minio_pv}.yaml minio-pv-${minio_pv}-new.yaml
vi minio-pv-${minio_pv}-new.yaml
spec:
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- ${new_ip}
# 删除pv,由于pv是绑定状态,需要手动Ctrl+C终止
kubectl delete pv ${minio_pv}

# 修改pv,删除' - kubernetes.io/pv-protection'
kubectl edit pv ${minio_pv}

# 检查pv是否成功删除
kubectl get pv ${minio_pv}

# 迁移后节点创建本地目录
ansible ${new_ip} -m file -a "path=${local_dir} state=directory"

# 重建pv
kubectl apply -f minio-pv-${minio_pv}-new.yaml

# 检查pv,要求状态为Bound
kubectl get pv ${minio_pv}
status=$(kubectl get pv ${minio_pv} | grep -v NAME | awk '{print $5}')
$status == "Bound"则符合预期

3. 重启 pod

kubectl delete pod ${minio_pod} -n ${minio_namespace}
# 检查pod状态
kubectl get pod ${minio_pod} -n ${minio_namespace} -owide
node=$(kubectl get pod ${minio_pod} -n ${minio_namespace} -owide | grep -v NAME | awk '{print $7}')
$node == ${new_ip}则符合预期

4. 检查

mc admin info minio

k8s测试环境部署记录

· 阅读需 4 分钟

本文记录了在本地部署k8s测试环境的过程,部署脚本参考github上其他同学分享的脚本,在其基础上做了些小改动。

k8s 中的节点类型

master 负责管理其他节点的调度中心,master可以有备机replica做冗余

minion 由master管理,运行容器服务,1个集群中有N个minion节点

部署前准备

部署此测试环境参考了github上其他同学的分享,我fork的repo地址:https://github.com/5xops/k8s-deploy

首先按照github repo中的readme部分将k8s rpm包下载到本地,以准备离线部署。其次我在本地测试环境准备了6以上的虚拟机节点,其中3个节点用于部署etcd集群,2个节点用于部署k8s master,其余节点用于部署k8s minion。 所有虚拟机均运行在一台物理服务器上,管理虚拟机用了这个脚本(https://github.com/itxx00/vmm)。

首先创建好需要使用到的虚拟机节点:

vmm create etcd1
vmm create etcd2
vmm create etcd3
vmm create kubem1
vmm create kubem2
vmm create node1
vmm create node2

因部署k8s集群时要求所有节点都配置好主机名,因为默认创建出来的虚拟机没有修改hostname,需要使用另外一个脚本来配置hostname并配置好/etc/hosts,首先准备好初始化执行的脚本:

#!/bin/bash
# content of ~/.vmm/init.sh
cd /tmp
hostnm=$(cat hostname)
[[ -n $hostnm ]] || {
echo "err"
exit 1
}
echo $hostnm >/etc/hostname
hostname $hostnm
cat /tmp/hosts.tmp >/etc/hosts

接着执行初始化操作:

vminit etcd1
vminit etcd2
vminit etcd3
vminit kubem1
vminit kubem2
vminit node1
vminit node2

每个节点的hostname将被设置成虚拟机的名字,同时vminit脚本会把本地的ssh公钥和私钥都拷贝到虚拟机节点,这样初始化之后的节点可以通过相同的密钥互相免密登录,注意这样的操作仅适用于快速搭建测试环境,生产环境千万不要这么处理。打通免密ssh是因为后面部署k8s时会用到。

搭建etcd集群

在部署k8s集群之前,我们需要先部署一个独立的etcd集群,k8s会用到这个集群。这里我采用ansible playbook来部署,playbook已经分享到github上面,(https://github.com/itxx00/ansible-etcd),按照repo中的readme来准备好集群。

准备镜像仓库

将下载下来的k8s rpm包和docker镜像放到/data/k8s-deploy目录,其中rpms目录存放了需要用到的rpm包,images目录存放需要用到的docker镜像,因原脚本中不包含k8s dashboard(一套web ui管理界面),为了能够部署dashboard,对原脚本作了修改增加了部署dashboard的选项,部署dashboard需要一些额外的docker镜像和配置文件,这里先补充好docker镜像:

yum -y install docker
systemctl start docker
docker pull googlecontainer/kubernetes-dashboard-amd64:v1.6.1
docker pull googlecontainer/heapster-influxdb-amd64:v1.1.1
docker pull googlecontainer/heapster-grafana-amd64:v4.0.2
docker pull googlecontainer/heapster-amd64:v1.3.0
cd /data/k8s-deploly/images
docker save googlecontainer/kubernetes-dashboard-amd64 -o kubernetes-dashboard-amd64_v1.6.1.tar
docker save googlecontainer/heapster-influxdb-amd64 -o heapster-influxdb-amd64_v1.1.1.tar
docker save googlecontainer/heapster-grafana-amd64 -o heapster-grafana-amd64_v4.0.2.tar
docker save googlecontainer/heapster-amd64 -o heapster-amd64_v1.3.0.tar

原脚本中安装rpm包是在各节点下载好后本地安装的,我改进了一下采用yum方式安装,准备yum仓库:

createrepo /data/k8s-deploy/rpms
yum -y install nginx
cat >/etc/nginx/conf.d/k8srepo.conf <<EOF
server {
listen 8000;
server_name _;
root /data/k8s-deploy;
autoindex on;

location / {
autoindex on;
}
}
EOF
systemctl restart nginx

至此yum repo和docker镜像准备完成。

部署k8s集群

部署过程参考https://github.com/5xops/k8s-deploy/blob/master/README.md ,需要修改repo中的k8slocal.repo文件中ip地址为yum仓库对应的ip地址,部署master、minion和replica可参考master.sh,minon.sh, replica.sh的内容。 需要注意的是为了部署dashboard服务我们额外增加了dashboard相关的配置文件,具体增加的内容请参考这个commit: https://github.com/5xops/k8s-deploy/commit/1766a675d76edb32f310acd98d5c6ed50a356e5b

至此,k8s测试环境及搭建完成,后续我将使用这个k8s测试环境来部署其他服务,后面会慢慢分享。