Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Rancher2 & K8S部署踩坑记录

Rancher2 & K8S部署踩坑记录

作者头像
Ewdager
发布于 2020-07-14 06:38:00
发布于 2020-07-14 06:38:00
3.8K00
代码可运行
举报
文章被收录于专栏:Gvoidy备份小站Gvoidy备份小站
运行总次数:0
代码可运行

本安装教程基于CetnOS 7环境编写

安装docker

首先安装依赖并添加国内源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ yum clean all

$ yum makecache fastyum -y

$ yum install docker-ce

启动服务并开机自起

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 通过systemctl启动服务
$ systemctl start docker

# 开机自启动
$ systemctl enable docker

# 验证docker
$ docker version

更改docker 存储目录至空间大的磁盘(默认挂载点为/var/lib/docker)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 停止docker服务
$ systemctl stop docker

# 迁移目录至空间大的挂载点
$ mv /var/lib/docker /data/docker

# 添加软链接
$ ln -s /data/docker /var/lib/docker

# 重启docker
$ systemctl start docker

安装Rancher2 & K8S集群

安装Rancher2

建议rancher server单独部署在一台机器上,不并入集群内

安装好docker后,启动rancher server

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 挂载目录设为/data/rancher并监听本机80/443端口,注意本机其他服务不要占用这两个端口
$ sudo docker run -d --restart=unless-stopped -v /data/rancher:/var/lib/rancher/ -p 8080:80 -p 8443:443 rancher/rancher:stable

访问安装server的主机ip,设置用户名密码,设置server url,此处需设置为即将添加入集群内的其他节点主机能访问的IP,可直接设置本机的公网IP

修改集群自动生成的域名后缀

部署K8S集群

注意 请使用v1.15版K8S

注意 在添加主机命令时,需点击显示高级选项,必须将节点机公网地址配入其中,不然后续服务仅能在集群所在内网网段访问

部署其他服务

添加内部应用商店

配置kubectl

  1. 在集群节点上下载Kubectl
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl

如果服务器上下载不了kubectl可去github release页面下载最新版kubectl,再上传至服务器

  1. 复制kubeconfig

进入集群仪表盘,点击 Kubeconfig文件 按钮,赋值里面全部内容

  1. 在安装好kubectl的机器上配置kubeconfig
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mkdir ~/.kube
$ vi ~/.kube/config
# Ctrl + V ~~~

kubectl命令 # 查看服务状态 kubectl get pod -n kafka -o wide # 查看单独pod kubectl describe pod -n kafka kafka-0

安装 helm

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
chmod 755 get_helm.sh
./get_helm.sh
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.16.0

helm list

#如果报错,修复
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy  --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'    
helm init --service-account tiller --upgrade

# 添加国内源
helm repo add stable https://burdenbear.github.io/kube-charts-mirror/
helm repo update

helm直接部署服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm install --name kong --set admin.useTLS=false,admin.servicePort=8001,admin.containerPort=8001,proxy.useTLS=false,proxy.servicePort=8000,proxy.containerPort=8000,livenessProbe.httpGet.scheme=HTTP,readinessProbe.httpGet.scheme=HTTP stable/kong

配置NFS存储类

请在已安装Kubectl并配置好kubeconfig的机器上执行

安装并配置nfs服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装NFS
$ yum install -y nfs-utils
$ yum -y install rpcbind

# 配置NFS服务端,创建数据目录
$ mkdir -p /data/nfs/k8s/
$ chmod 755 /data/nfs/k8s

# NFS配置文件设置目录信息
$ vi /etc/exports
/data/nfs/k8s/ *(async,insecure,no_root_squash,no_subtree_check,rw)

# 重启nfs服务
$ /bin/systemctl start nfs.service

# 设置开机启动
$ /bin/systemctl enable nfs.service

# 查看挂载情况
$ showmount -e
>>> Export list for k8s-test2-master:
>>> /data/nfs/k8s *

创建 ServiceAccount

找个地方创建nfs-rbac.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kind: ServiceAccount
apiVersion: v1
metadata:
  name: nfs-client-provisioner
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: kube-system      # 此处安装进Rancher的系统命名空间,可替换
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: kube-system      # 此处安装进Rancher的系统命名空间,可替换
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

执行 kubectl apply -f nfs-rbac.yaml -n kube-system

部署 NFS Provisioner

找个地方创建nfs-provisioner-deploy.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate      #---设置升级策略为删除再创建(默认为滚动更新)
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          #---由于quay.io仓库国内被墙,所以替换成七牛云的仓库
          image: quay-mirror.qiniu.com/external_storage/nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: nfs-client     #--- nfs-provisioner的名称,以后设置的storageclass要和这个保持一致
            - name: NFS_SERVER
              value: 10.74.20.12   #---NFS服务器地址,和 valumes 保持一致
            - name: NFS_PATH
              value: /data/nfs/k8s      #---NFS服务器目录,和 valumes 保持一致
      volumes:
        - name: nfs-client-root
          nfs:
            server: 10.74.20.12    #---NFS服务器地址
            path: /data/nfs/k8s       #---NFS服务器目录

执行kubectl apply -f nfs-provisioner-deploy.yaml -n kube-system

部署 NFS SotageClass

找个地方创建nfs-storage.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
  annotations:
    storageclass.kubernetes.io/is-default-class: "true" #---设置为默认的storageclass
provisioner: nfs-client    #---动态卷分配者名称,必须和上面创建的"provisioner"变量中设置的Name一致
parameters:
  archiveOnDelete: "true"  #---设置为"false"时删除PVC不会保留数据,"true"则保留数据
mountOptions:
  - hard        #指定为硬挂载方式
  - nfsvers=4   #指定NFS版本,这个需要根据 NFS Server 版本号设置

执行kubectl apply -f nfs-storage.yaml -n kube-system

部署longhorn

教程编写当前,Longhorn为Rancher实验性功能。如已安装NFS可不安装Longhorn。

  1. 在每台节点机器上安装open-iscsi
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ yum install iscsi-initiator-utils
  1. 在Rancher应用商店安装Longhorn即可

其他

Rancher完全删除脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 # 停止服务
  systemctl  disable kubelet.service
  systemctl  disable kube-scheduler.service
  systemctl  disable kube-proxy.service
  systemctl  disable kube-controller-manager.service
  systemctl  disable kube-apiserver.service

  systemctl  stop kubelet.service
  systemctl  stop kube-scheduler.service
  systemctl  stop kube-proxy.service
  systemctl  stop kube-controller-manager.service
  systemctl  stop kube-apiserver.service

  # 删除所有容器
  docker rm -f $(docker ps -qa)

  # 删除所有容器卷
  docker volume rm $(docker volume ls -q)

  # 卸载mount目录
  for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher;
  do
    umount $mount;
  done

  # 备份目录
  mv /etc/kubernetes /etc/kubernetes-bak-$(date +"%Y%m%d%H%M")
  mv /var/lib/etcd /var/lib/etcd-bak-$(date +"%Y%m%d%H%M")
  mv /var/lib/rancher /var/lib/rancher-bak-$(date +"%Y%m%d%H%M")
  mv /opt/rke /opt/rke-bak-$(date +"%Y%m%d%H%M")

  # 删除残留路径
  rm -rf  /etc/ceph \
          /etc/cni \
          /opt/cni \
          /run/secrets/kubernetes.io \
          /run/calico \
          /run/flannel \
          /var/lib/calico \
          /var/lib/cni \
          /var/lib/kubelet \
          /var/log/containers \
          /var/log/pods \
          /var/run/calico

  # 清理网络接口
  no_del_net_inter='
  lo
  docker0
  eth
  ens
  bond
  '
  network_interface=`ls /sys/class/net`
  for net_inter in $network_interface;
  do
    if ! echo "${no_del_net_inter}" | grep -qE ${net_inter:0:3}; then
      ip link delete $net_inter
    fi
  done

  # 清理残留进程
  port_list='
  80
  443
  6443
  2376
  2379
  2380
  8472
  9099
  10250
  10254
  '

  for port in $port_list;
  do
    pid=`netstat -atlnup | grep $port | awk '{print $7}' | awk -F '/' '{print $1}' | grep -v - | sort -rnk2 | uniq`
    if [[ -n $pid ]];then
      kill -9 $pid
    fi
  done

  kube_pid=`ps -ef | grep -v grep | grep kube | awk '{print $2}'`

  if [[ -n $kube_pid ]];then
    kill -9 $kube_pid
  fi

  # 清理Iptables表
  ## 注意:如果节点Iptables有特殊配置,以下命令请谨慎操作
  sudo iptables --flush
  sudo iptables --flush --table nat
  sudo iptables --flush --table filter
  sudo iptables --table nat --delete-chain
  sudo iptables --table filter --delete-chain

  systemctl restart docker
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用 RKE 方式搭建 K8s 集群并部署 NebulaGraph
在本文,我将会详细地记录下我用 K8s 部署分布式图数据库 NebulaGraph 的过程。下面是本次实践的内容规划:
NebulaGraph
2023/08/07
1K0
使用 RKE 方式搭建 K8s 集群并部署 NebulaGraph
K8s之Helm工具详解
一、helm介绍 在Kubernetes中部署容器云的应用也是一项有挑战性的工作,Helm就是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具。通过helm能够帮助开发者定义、安装和升级Kubernetes中的容器云应用,同时,也可以通过helm进行容器云应用的分享。在Kubeapps Hub中提供了包括Redis、MySQL和Jenkins等常见的应用,通过helm可以使用一条命令就能够将其部署安装在自己的Kubernetes集群中。
小仙女闯运维
2020/09/23
2.5K0
k8s上部署JupyterHub实现多用户空间(第一篇)
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。
dbdocker
2023/02/16
2.1K2
k8s 使用新版NFS Provisioner配置subdir
NFS在k8s中作为volume存储已经没有什么新奇的了,这个是最简单也是最容易上手的一种文件存储。最近有一个需求需要在k8s中使用NFS存储,于是记录如下,并且还存在一些骚操作和过程中遇到的坑点,同时记录如下。
没有故事的陈师傅
2021/08/13
3.6K0
使用 kubeadm 部署 Kubernetes 1.21.10 [2022 更新版]
有两种方法可以部署 Master 相关的组件,一种是使用init 配置文件,另外一种是使用命令行参数,建议使用 init 配置文件进行部署。
懒人的小脑
2022/03/15
1.4K0
我要在k8s部署nfs动态存储
用 kubectl describe pvc -n jumpserver jumpserver-pvc 来查看详细信息发现以下提示
dgds
2023/06/09
1.3K0
谁再说不会 K8S 高可用部署,就把这个给他甩过去!
文档:https://kubernetes.io/zh-cn/docs/home/
民工哥
2022/10/27
1.4K0
谁再说不会 K8S 高可用部署,就把这个给他甩过去!
二进制安装k8s集群(19)-安装helm和tiller
在上一篇文章中我们安装了nginx application,在这个安装过程中我们部署了deployment文件,service文件,ingress文件。当然有的application还不只这些,还可能有service account,role,rolebinding,configmap,secret等等,这些资源对象构成了完整的application。那么很自然的就想到有没有办法把这些资源当作一个完整的应用包,我们只需要简单的命令就可以完成对于应用的安装升级等操作呢。可以想象一下,我们需要的是类似yum这样的工具来完成k8s应用的安装升级管理,在k8s里helm正是扮演了这样的角色。
TA码字
2020/04/01
1.4K0
二进制安装k8s集群(19)-安装helm和tiller
实战:用“廉价”的NFS作为K8S后端存储
大家都知道,NFS是一种基于网络的文件系统协议,允许在不同的机器之间共享文件系统资源。在K8S中,可以使用NFS作为后端存储,以提供持久化存储和共享存储卷。但是否适合在生产环境使用NFS作为后端存储,这取决于具体的应用程序和使用场景。如果应用程序对性能和可靠性要求比较高,可能需要选择其他更适合的存储方案,比如ceph。如果只是在测试或者开发环境中,我觉得使用NFS可以更方便地实现共享存储卷,提高测试或者开发的效率。
不背锅运维
2023/04/10
1.3K0
实战:用“廉价”的NFS作为K8S后端存储
k8s的pv与pvc
PV 的全称是:PersistentVolume(持久化卷),是对底层的共享存储的一种抽象,PV 由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS 等,都是通过插件机制完成与共享存储的对接。
SY小站
2020/06/15
1.2K0
k8s实践(九):Helm and Kubeapps UI
  Helm是一个Kubemetes包管理器(类似于OS包管理器,比如Linux中的yum、apt,或者MacOS中的 homebrew)。
loong576
2019/10/12
2.7K0
k8s实践(九):Helm and Kubeapps UI
「走进k8s」Kubernetes1.15.1的Helm安装使用(37)
PS:安装helm,使用了很多种方式了,感觉这种是最稳的,分享给大家,这里就简单的介绍了helm的几个命令:创建,删除,查看,打包,更多的命令还是查看helm的官方文档吧,下次继续说说helm的基本使用。
IT架构圈
2019/09/17
1.4K0
「走进k8s」Kubernetes1.15.1的Helm安装使用(37)
九、k8s之helm及其它功能性组件
在没使用helm之前,向kubernetes部署应用,我们要依次部署deployment,service,configMap等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂.
阿dai学长
2020/10/26
1.1K0
九、k8s之helm及其它功能性组件
Helm应用包管理器初步认识
每个成功的软件平台都有一个优秀的打包系统,比如 Debian、Ubuntu 的 apt,Redhat、Centos 的 yum。而 Helm 则是 Kubernetes 上的包管理器,可以很方便的将之前打包好的yaml文件部署到kubernetes上。
王先森sec
2023/04/24
7370
Helm应用包管理器初步认识
【云原生实战】Kubernetes上安装KubeSphere
面向云原生应用的容器混合云,支持 Kubernetes 多集群管理的 PaaS 容器云平台解决方案 | KubeSphere
陶然同学
2023/02/27
6640
【云原生实战】Kubernetes上安装KubeSphere
Kubernetes 集群部署 NFS 网络存储
Kubernetes 对 Pod 进行调度时,以当时集群中各节点的可用资源作为主要依据,自动选择某一个可用的节点,并将 Pod 分配到该节点上。在这种情况下,Pod 中容器数据的持久化如果存储在所在节点的磁盘上,就会产生不可预知的问题,例如,当 Pod 出现故障,Kubernetes 重新调度之后,Pod 所在的新节点上,并不存在上一次 Pod 运行时所在节点上的数据。
高楼Zee
2020/11/30
6.4K0
Kubernetes 集群部署 NFS 网络存储
K8S学习笔记之k8s使用ceph实现动态持久化存储
本文章介绍如何使用ceph为k8s提供动态申请pv的功能。ceph提供底层存储功能,cephfs方式支持k8s的pv的3种访问模式ReadWriteOnce,ReadOnlyMany ,ReadWriteMany ,RBD支持ReadWriteOnce,ReadOnlyMany两种模式
Jetpropelledsnake21
2019/05/31
2.6K0
Helm 编排教程
我们知道 Kubernetes 是一个分布式的容器集群管理系统,它把集群中的管理资源抽象化成一个个 API 对象,并且推荐使用声明式的方式创建,修改,删除这些对象,每个 API 对象都通过一个 yaml 格式或者 json 格式的文本来声明。这带来的一个问题就是这些 API 对象声明文本的管理成本,每当我需要创建一个应用,都需要去编写一堆这样的声明文件。
Ewdager
2020/08/06
2.8K0
K8s——数据持久化自动创建PV
实现k8s的数据持久化的流程为:搭建nfs底层存储---->创建PV---->创建PVC---->创建pod。最终pod中的container实现数据的持久化。
小手冰凉
2020/09/11
2.4K0
详解kubernetes的企业级监控(付文档)
• request(需求资源):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod • limit(资源限额):即运行Pod期间,可能内存使用量会增加,可以在yaml文件中设定最多能使用多少内存配置资源限额
IT运维技术圈
2022/10/24
1.2K0
相关推荐
使用 RKE 方式搭建 K8s 集群并部署 NebulaGraph
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验