文章目录
第一部分 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