k8s学习笔记(1)

165 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

特性

  • 自动装箱:基于容器对应用环境的资源配置要求自动部署应用容器
  • 自动修复:
    • 容器失败时自动重启
    • 节点出问题时,重新调度、部署
    • 容器未通过检查时,关闭容器
    • 容器正常运行,才对外提供服务
  • 水平扩展:对应用容器进行规模扩大、裁剪
  • 服务发现:包含服务发现和负载均衡
  • 滚动更新:根据应用的变化、对应用进行一次性或批量式更新
  • 版本回退:根据应用部署情况,对应用进行历史版本即时回退
  • 密钥和配置管理:不需要重新构建镜像,更新密钥和应用配置。
  • 存储编排:
    • 自动实现存储系统挂载及应用
    • 存储卷动态供给

组件

  • master
    • apiserver:负责接收并处理请求。各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储
    • scheduler:调度容器创建的请求
    • controller-manager:检测控制器健康、确保容器健康
    • etcd:分布式键值存储,用于保存集群状态数据,比如pod、service等
  • node
    • kubelet:用于与master通信,接收master调度过来的任务并执行。管理本机容器的生命周期。将每个pod转换成一组容器。
    • kube-proxy:在Node节点上实现Pod网络代理。
    • docker:容器引擎,用于创建、运行容器

部署

部署方式

  • 传统方式部署k8s自身,k8s自己的相关组件统统运行为系统级的守护进程,包括master和node上的组件。缺点:每一步都需要手动解决,包括做证书等……过程繁琐且复杂;系统级的守护进程某个组件挂了需要手动启动。
  • kubeadm
    • 把k8s自己部署为pod
    • master和node只需有手动安装kubelet和docker
    • master和node中的组件运行为pod(static pod)
    • flannel运行为pod,托管在k8s集群中

使用 kubeadm 部署 Kubernetes

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。

这个工具能通过两条指令完成一个kubernetes集群的部署:

# 创建一个 Master 节点
$ kubeadm init

# 将一个 Node 节点加入到当前集群中
$ kubeadm join <Master节点的IP和端口 >

学习目标

  1. 在所有节点上安装Docker和kubeadm
  2. 部署Kubernetes Master
  3. 部署容器网络插件
  4. 部署 Kubernetes Node,将节点加入Kubernetes集群中
  5. 部署Dashboard Web页面,可视化查看Kubernetes资源

前提

  • 各节点时间同步
  • 各节点主机名称解析
    hostname master
    hostnamectl set-hostname master
    echo "127.0.0.1   $(hostname)" >> /etc/hosts
    
  • 各节点iptables及firewalld服务器被disabled
    systemctl stop firewalld
    systemctl disable firewalld
    
  • 关闭selinux
    sed -i 's/enforcing/disabled/' /etc/selinux/config
    setenforce 0
    
  • 关闭swap
    swapoff -a  # 临时
    vim /etc/fstab  # 永久
    #注释掉swap行
    

步骤

  1. 设置各节点安装程序包
    1. 下载docker仓库文件

      cd /etc/yum.repos.d/
      wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      
    2. 生存Kubernetes仓库文件 vim kubernetes.repo

      [kubernetes]
      name=Kubernetes Repo
      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/rpm-package-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
      
    3. 安装 (指定版本)

      yum install -y docker-ce-19.03.8 kubelet-1.18.8 kubeadm-1.18.8 kubectl-1.18.8
      

      node节点可不安装kubectl

  2. 初始化主节点
    1. 设置ip6tables和iptables值为1
      echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
      echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
      
      如果提示No such file or directory
      #安装bridge-util软件,加载bridge模块,加载br_netfilter模块
      yum install -y bridge-utils
      modprobe bridge
      modprobe br_netfilter
      
    2. 设置kubelet、docker开机自启动
      systemctl enable kubelet docker
      
    3. 启动docker、kubelet
      systemctl start docker kubelet
      
    4. 使用kubeadm init初始化
      kubeadm init \
      --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
      --kubernetes-version=v1.18.8 \
      --service-cidr=10.1.0.0/16 \
      --pod-network-cidr=10.244.0.0/16
      
      记录生成的kubeadm join完整命令 若失败,需重新初始化,则重置kubeadm kubeadm reset
    5. 初始化kubectl
      mkdir -p $HOME/.kube
      cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      
    6. 部署flannel
      kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
      
      如果下载失败:
      1. 从其他服务器下载镜像,修改tag,再打包
        docker pull lizhenliang/flannel:v0.11.0-amd64
        docker images
        docker tag lizhenliang/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
        docker image save quay.io/coreos/flannel:v0.11.0-amd64 -o flannelv0.11.0-amd64.tar
        
      2. 导入镜像到服务器上,(master和nodes服务器都要) docker load -i flannelv0.11.0-amd64.tar
      3. 再执行该命令 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 如果之前安装过,没有成功,则先删除 kubectl delete -f kube-flannel.yml 查看flannel是否成功启动 kubectl get pods -n kube-system
    7. 验证master节点 kubectl get nodes
  3. 添加node节点到集群中
    1. 同上操作:
      1. 启动docker
      2. 设置docker、kubelet开机自启
      3. 设置ip6tables、iptables值为1
      4. 导入镜像
    2. 将节点加入master集群中 使用前面记录的kubeadm join命令
    3. 回到master节点验证 kubectl get nodes