K8S概念和架构

226 阅读4分钟

第一部分 K8S概念和架构

1.为什么要使用K8S

容器集群管理系统,传统的war包需要安装环境增加配置这种很容易出现应用环境冲突,docker可以进行带环境容器搭建和集群,但K8S让部署容器化应用更加简单。

2.组成部分和功能

2.1功能

  • 自动装箱 按照配置自动部署应用容器
  • 自我修复 自动重启,出现问题重新部署和调度,如果容器出现异常会一直到正常才会提供服务
  • 水平扩展 可以使用命令或者ui界面去扩展或缩减节点
  • 服务发现 可以根据自身去进行服务发现和负载均衡
  • 滚动更新 可以一次性更新全部容器也可以批量更新
  • 版本回退 即时回退
  • 密钥和配置管理 不重启容器就可以修改配置热部署
  • 存储编排 自动实现目录挂载
  • 批处理 可以做定时任务

2.2组成部分和集群架构

在这里插入图片描述

  • master组件 apiserver 集群的统一入口,是restful方式 scheduler node节点调度,部署应用 controller-manager 资源控制器,管理资源的控制 etcd 存储保存集群中的数据
  • node组件 kubelet 节点代表管理本机容器 kube-porxy 网络代理、负载均衡

3.核心概念

3.1 Pod

  • 最小的容器单元
  • 一个单元里有很多的容器
  • 同一个单元共享网络
  • 生命周期是短暂的,停止就会消失

3.2controller控制器

  • 无状态应用部署 相当于容器没有任何外部依赖,出错停止即销毁,启动也可以直接创建新节点直接启动
  • 有状态应用部署 有外部依赖比如ip端口固定,挂载了外部的目录
  • 确保所有的node运行同一个pod controller创建pod,一个pod包含多个node

3.3service

定义一组pod的访问规则

4.搭建k8s

4.1搭建方式

(1)基于客户端工具kubeadm(部署简单高效) (2)基于二进制包方式搭建(部署复杂,出错易排查)

4.2单个master集群方式

4.2.1准备工作

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

关闭swap

swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

没有安装过docker的安装一下docker,记得切换阿里镜像源 安装镜像源否则无法下载k8s

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装K8s

$ yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
$ systemctl enable kubelet

4.2.2部署master和node节点

master服务器

  • 设置节点ip名称
cat >> /etc/hosts << EOF
192.168.1.202 k8smaster
192.168.1.201 k8snode1
192.168.1.200 k8snode2
EOF

在三台服务器上各自执行命令

hostnamectl set-hostname 服务器对应的名称
  • 部署K8smaster
kubeadm init \
  --apiserver-advertise-address=192.168.1.202 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.18.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

五个参数:ip地址、镜像地址、软件版本号、子网划分IP段、k8s内部的pod节点之间网络可以使用的IP段(不能和service-cidr写一样) 后边两个参数不知道咋写,不修改直接这样写也没问题

  • 复制提示信息中的代码块进行执行 当出现Your Kubernetes control-plane has initialized successfully!提示时,按照提示信息中进行操作。 在这里插入图片描述

请注意!!!!!!!!!!!!!!!!!!! 第一个红框内在master节点执行 第二个红框内内容在node节点执行

4.2.3部署网络插件

  • 执行命令
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

第二部分 从零搭建K8S集群

第三部分 K8S核心概念 (1)Pod (2)controller控制器 (3) service Ingress (4)RABC (5)Helm等 (6)持久存储 第四部分 搭建集群监控系统 第五部分 从零搭建毫克用的K8S集群 第六部分 在集群环境中部署项目 第七部分 K8S集群部署项目

错误统计

join命令失败

从节点删除主节点信息

kubeadm reset -f
systemctl stop kubelet
rm -rf /etc/kubernetes/*

主节点移除从节点

drain localhost.localdomain --delete-local-data --force --ignore-daemonsets node/localhost.localdomain
kubectl delete node localhost.localdomain

kubectl apply -f raw.githubusercontent.com/coreos/flan… CrashLoopBackOff 错误

通过命令查看节点 sudo kubectl --namespace kube-system logs kube-flannel-ds-h7znd异常为: Error registering network: failed to acquire lease: node "k8smaster" pod cidr not assigned 说明网络master和node不通,init的时候加了参数竟然还有这个问题,不明白为什么,不过可以执行以下命令

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

然后添加两个配置

 - --allocate-node-cidrs=true
 - --cluster-cidr=10.244.0.0/16

在这里插入图片描述

文献资料