第一部分 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