k8s中级篇-使用rke安装k8s集群

·  阅读 2208

前言

之前为了快速入门学习k8s的编排,直接使用了阿里云上的k8s集群,本中级篇这里尝试一下从0-1搭建k8s集群,并演示一些更为经典的案例:如自建nfs服务器存储卷的使用、自动证书签发cert-manager let's encrypt、rancher2.x、helm包管理工具等。

环境

主机名ip角色
mldong01192.168.0.245master
mldong02192.168.0.54node01
mldong03192.168.0.22node02

三台主机为华为软开云的ECS,CentOS Linux release 7.6.1810 (Core)

安装docker

版本 19.03.9

  1. 卸载当前docker版本(按需)
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
复制代码
  1. 安装包管理工具

    yum install -y yum-utils
    yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    复制代码
  2. 查看版本

    yum list docker-ce --showduplicates | sort -r
    复制代码
  3. 安装docker-指定版本

    yum install docker-ce-19.03.9-3.el7 docker-ce-cli-19.03.9-3.el7 containerd.io
    复制代码
  4. 启动docker

    systemctl start docker
    复制代码
  5. 修改配置

    {
      "registry-mirrors": [
        "https://3p42xjxk.mirror.aliyuncs.com",
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
      ],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      }
    }
    
    复制代码
  • registry-mirrors:加速镜像
    • log-driver:日志引擎
    • log-opts:日志配置
  1. 重启docker

    systemctl restart docker
    复制代码

安装Kubectl

  • 源配置
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
复制代码
  • 安装
[root@mldong ~]# yum install -y kubectl
复制代码

安装rke前准备

  1. 禁用所有 woker 节点上的交换功能(Swap)

    swapoff -a
    复制代码
  2. 检查下列模组是否存在-所有节点

    for module in br_netfilter ip6_udp_tunnel ip_set ip_set_hash_ip ip_set_hash_net iptable_filter iptable_nat iptable_mangle iptable_raw nf_conntrack_netlink nf_conntrack nf_conntrack_ipv4   nf_defrag_ipv4 nf_nat nf_nat_ipv4 nf_nat_masquerade_ipv4 nfnetlink udp_tunnel veth vxlan x_tables xt_addrtype xt_conntrack xt_comment xt_mark xt_multiport xt_nat xt_recent xt_set  xt_statistic xt_tcpudp;
        do
          if ! lsmod | grep -q $module; then
            echo "module $module is not present";
          fi;
        done
    复制代码
  3. 修改sysctl配置-所有节点

    vi /etc/sysctl.conf
    ## 加入如下
    net.bridge.bridge-nf-call-iptables=1
    ## 重新加载配置
    sysctl -p /etc/sysctl.conf
    复制代码
  4. 创建用户-所有节点

    # 创建用户
    useradd rkeuser
    # 给用户设置密码
    passwd rkeuser
    复制代码
  5. 将用户添加到docker组

    usermod -aG docker rkeuser
    复制代码
  6. 配置免密登录-master节点

    # 生成公钥-私钥对
    ssh-keygen  -t rsa -C 'dev@mldong.com'
    # 将master节点的公钥复制到所有节点(包括自身)-使得新建的rkeuser用户
    ssh-copy-id rkeuser@192.168.0.245
    ssh-copy-id rkeuser@192.168.0.54
    ssh-copy-id rkeuser@192.168.0.22
    复制代码
  7. 验证rkeuser是否有docker命令权限

    # 登录
    ssh rkeuser@192.168.0.245
    # 执行docker命令
    docker ps
    复制代码
  8. 端口要求

    开放6443-KubeAPI和2379-etcd

  9. SSH server配置

    vi /etc/ssh/sshd_config
    
    ## 允许TCP转发
    AllowTcpForwarding yes
    复制代码

安装介绍

  1. 下载rke二进制包-master

    https://github.com/rancher/rke/releases

    wget https://github.com/rancher/rke/releases/download/v1.2.4-rc9/rke_linux-amd64
    复制代码
  2. 修改文件名并执行运行权限

    mv rke_linux-amd64 /usr/local/bin/rke
    chmod +x /usr/local/bin/rke
    复制代码
  3. 查看版本号

    [root@mldong01 download]# rke --version
    rke version v1.2.4-rc9
    复制代码
  4. 使用rke生成配置文件

    rke config --name cluster.yml
    复制代码

    也可以使用下面的样例文件

    nodes:
    - address: 192.168.0.245
      port: "22"
      internal_address: 192.168.0.245
      role:
      - controlplane
      - worker
      - etcd
      hostname_override: "mldong01"
      user: rkeuser
      ssh_key_path: ~/.ssh/id_rsa
      ssh_agent_auth: true
      labels: {}
      taints: []
    - address: 192.168.0.54
      port: "22"
      internal_address: 192.168.0.54
      role:
      - worker
      hostname_override: "mldong02"
      user: rkeuser
      ssh_key_path: ~/.ssh/id_rsa
      ssh_agent_auth: true
      labels: {}
      taints: []
    - address: 192.168.0.22
      port: "22"
      internal_address: 192.168.0.22
      role:
      - worker
      hostname_override: "mldong03"
      user: rkeuser
      ssh_key_path: ~/.ssh/id_rsa
      ssh_agent_auth: true
      labels: {}
      taints: []
    kubernetes_version: "v1.19.6-rancher1-1"
    cluster_name: "mldong-k8s"
    复制代码

    主要参数说明:

    nodes[].address:对外ip

    nodes[].port:ssh端口号

    nodes[].internal_address:内网ip

    nodes[].role:节点角色,数组,三个选项[controlplane,worker,etcd]

    nodes[].hostname_override:虚拟域名

    nodes[].user:ssh用户名

    nodes[].ssh_key_path:ssh私钥

    nodes[].ssh_agent_auth:启用ssh认证

    kubernetes_version:k8s版本,可以使用命令查看支持版本rke config --list-version --all

    cluster_name:集群名称

  5. 开始执行安装

    rke up --config cluster.yml
    复制代码

    image-20201229162725543

    安装过程需要下载镜像,时间比较久,请耐心等待

    image-20201229175001440

  6. 安装成功后会生成相关文件

  • cluster.yml:RKE 集群的配置文件。
  • kube_config_cluster.yml:该集群的包含了获取该集群所有权限的认证凭据。
  • cluster.rkestateKubernetes 集群状态文件,包含了获取该集群所有权限的认证凭据,使用 RKE v0.2.0 时才会创建这个文件。
  1. 验证安装

    • 复制kubeconfig文件

      scp kube_config_cluster.yml ~/.kube/config
      复制代码
    • 获取集群节点信息

      [root@mldong01 download]# kubectl get nodes
      NAME       STATUS   ROLES                      AGE     VERSION
      mldong01   Ready    controlplane,etcd,worker   3d16h   v1.19.6
      mldong02   Ready    worker                     3d16h   v1.19.6
      mldong03   Ready    worker                     3d16h   v1.19.6
      复制代码

完全卸载rke

#!/bin/bash
#杀死所有正在运行的容器
docker stop $(docker ps -a -q)

#删除所有容器
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
  
#删除残留路径
rm -rf /etc/ceph \
       /etc/cni \
       /etc/kubernetes \
       /opt/cni \
       /opt/rke \
       /run/secrets/kubernetes.io \
       /run/calico \
       /run/flannel \
       /var/lib/calico \
       /var/lib/etcd \
       /var/lib/cni \
       /var/lib/kubelet \
       /var/lib/rancher/rke/log \
       /var/log/containers \
       /var/log/pods \

#清理网络接口
  network_interface=`ls /sys/class/net`
  for net_inter in $network_interface;
  do
    if ! echo $net_inter | grep -qiE 'lo|docker0|eth*|ens*';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
  
  pro_pid=`ps -ef |grep -v grep |grep kube|awk '{print $2}'`

  if [[ -n $pro_pid ]];then
    kill -9 $pro_pid
  fi
#清理路由规则 
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
# 重启docker
sudo systemctl restart docker
复制代码

小结

使用rke安装隐藏了一些k8s的安装细节,其他更详细的说明建议去看rancher2的官方文档,这里就不展开。

相关文章

k8s中级篇-Helm安装与入门

k8s中级篇-cert-manager+Let's Encrypt自动证书签发

k8s中级篇-Helm安装nfs-client-provisioner

分类:
后端
分类:
后端
收藏成功!
已添加到「」, 点击更改