两小时 K8s 从入门到放弃

Kubernetes是什么?

K8s是google开发的专门用来管理docker 容器的平台,为我们 提供可视化界面,方便我们对各个容器进行管理。

基础概念

  • Master:
    Cluster 的大脑,主要职责是调度,可以运行多个 master 来保证高可用。

  • Node:
    职责是运行容器应用,Node 由 Master 管理,负责监控并汇报容器的状态, 同时根据 Master 的要求管理容器的生命周期。

  • Pod:
    Pod 是 K8s 的最小工作单元。每个 Pod 包含一个或多个容器。

  • Pod 控制器:
    K8s 通常不直接创建 Pod,而是通过 Controller 来管理 Pod。Controller 中 定义了 pod 的部署属性,比如几个副本、在什么样的 Node 上运行等。 K8s 提供了多种 Controller,包括 Deployment、ReplicaSet、DaemonSet、 StatefuleSet、Job 等。

  • Service:
    K8s service 定义了外界访问一组特定 Pod 的方式。service 有 自己的 IP 和端口,service 为 Pod 提供了负载均衡。

  • Namespace:
    Namespace 将物理的 Cluster 逻辑上划分成多个虚拟 Cluster,每个 Cluster 就 是一个 Namespace。不同的 Namespace 里的资源是完全隔离的。

K8s的架构

图片 - Kuberentes架构(图片来自于网络)
  1. Master 节点包含 API Server、Scheduler(调度器)、ControllerManager (控制器管理器)这三个核心的
    组件。
  2. Node 节点包含的核心组件有 Kubelet、Docker 容器引擎、Kube-proxy。
API Server(kube-apiserver)

提供了 HTTP/HTTPS RESTful API,即 Kubernetes API。 API server 是 Kubernetes Cluster 的前端接口。其他客户端工具(CLI 或 UI)以及 K8S 其它组件可以通过它管理 Cluster 资源。

Scheduler(kube-scheduler)

调度器,它负责决定将 Pod 放在哪个 Node 上运行。调度时候考虑 Cluster 拓扑,各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。

Controller-Manager

负责监控每一个 Controller(控制器)的健康状态,并确保控制器是健康的。 而控制器是确保 Pod 健康的组件。

etcd

负责保存 K8s Cluster 的配置信息和各种资源的状态信息。当数据发生变化时, etcd 可以快速的通知 K8s 组件。

Kubelet

是 Node 的 agent,当 scheduler 确定在某个 Node 上运行 Pod 后,会将 Pod 的 具体配置信息(image、volume 等)发送给该节点的 kubelet,kubelet 根据 这些信息创建和运行容器,并向 Master 报告运行状态。

Kube-proxy

service 在逻辑上代表了后端的多个 Pod,外界通过 service 访问 Pod。service 接收到的请求是如何转发到 Pod 的呢?这就是 kube-proxy 要完成的工作。每 个 node 都运行 kube-proxy 服务,它负责将访问 service 的 TCP/UDP 数据流转 发到后端容器。如果有多个副本,kube-proxy 实现负载均衡。

K8s集群搭建

重要的事情说三遍!保证Master节点最少2.5G的内存
重要的事情说三遍!保证Master节点最少2.5G的内存
重要的事情说三遍!保证Master节点最少2.5G的内存

1. 安装环境

docker 18.09.9 和 kubelet-1.16.4,要求 centos7.6 以上版本

2. 关闭 selinux
1.查看 selinux 是否关闭
运行指令 getenforce  
输出 Enforcing(未关闭)
2.设置临时关闭
setenforce 0
3.永久关闭
vi /etc/sysconfig/selinux
修改 SELINUX=disabled
3. 关闭 swap (交换分区,虚拟内存)

K8s要求安装前必须禁用swap

临时禁用 :swapoff -a
永久禁用:sed -i.bak '/swap/s/^/#/' /etc/fstab ##注释掉/etc/fstab中 swap 那一行
禁用swap
4.配置 ip_forward 转发

ip_forward 配置文件当前内容为 0,表示禁止数据包转发,将其修改为 1 表 示允许

 echo "1" > /proc/sys/net/ipv4/ip_forward
5.更新 yum 源

(1)清除掉本地的yum源

cd /etc/yum.repos.d/
rm -rf *

(2)下载centos7的源和docker的源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(3)配置 k8s 源

cat < /etc/yum.repos.d/kubernetes.repo 
[kubernetes]
 name=Kubernetes
 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
 enabled=1
 gpgcheck=0
 EOF

(4)刷新yum源

yum clean all && yum makecache fast
6.安装docker
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y

k8s 运行要求 docker 的--cgroup-driver=systemd


docker配置

启动 docker 并设置开机启动

systemctl enable docker && systemctl start docker
7.安装 k8s 组件
yum install -y kubelet-1.16.4 kubeadm-1.16.4 kubectl-1.16.4
#设置开机启动:
systemctl enable kubelet && systemctl start kubelet
#添加 kubectl 上下文到环境中 
echo "source <(kubectl completion bash)" >> ~/.bash_profile 
#在home目录中,配置生效
source ~/.bash_profile 
8.内核参数修改
  • k8s 网络一般使用 flannel,该网络需要设置内核参数 bridge-nf-call-iptables=1 添加参数配置文件:


    修改内核参数

    执行:

sysctl -p /etc/sysctl.d/k8s.conf
  • 内核参数修改失败常见问题

有些系统执行 sysctl -p /etc/sysctl.d/k8s.conf 会报异常,一般是因为 修改这个参数需要系统有 br_netfilter 模块。
使用 lsmod |grep br_netfilter 命令,查看系统里是否有 br_netfilter 模块。
如果没有,则新增 modprobe br_netfilter。
该方式重启后无效。

  • 配置系统启动加载脚本使其永久生效
    》先加开机启动动作

》再做加载模块动作


》再增加执行权限

至此,已经配置完毕了!

k8s集群搭建

Master节点
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.4 --pod-network-cidr=10.244.0.0/16

执行成功会出现

Your Kubernetes control-plane has initialized successfully!  ###这里表示执行成功

To start using your cluster, you need to run the following as a regular user:  
###按照下面的步骤,挨个执行,完成初始化
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
### 为K8s配置网络
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:
### work节点加入Master的命令
kubeadm join 192.168.31.81:6443 --token ftsxid.akspxn7kwvzh98kk \
    --discovery-token-ca-cert-hash sha256:6335d59897e02a10bef22a4a057d88f27f43e0a0239919a20fd0cb8675930ace

根据上面的提示进行操作

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

添加 flannel 的网络

kubectl apply -f  kube-flannel.yml  该文件需要自己去下载
work节点

执行上面的join命令就可以加入集群了

kubeadm join 192.168.31.81:6443 --token ftsxid.akspxn7kwvzh98kk \
    --discovery-token-ca-cert-hash sha256:6335d59897e02a10bef22a4a057d88f27f43e0a0239919a20fd0cb8675930ace
查看集群
kubectl  get  nodes

OK!一个简单的集群就搭建OK了。

你可能感兴趣的:(两小时 K8s 从入门到放弃)