k8s(kubernetes)集群
内容介绍
- k8s的概念和架构
- 从零搭建k8s集群
- 基于客户端工具kubeadm搭建
- 基于二进制包方式找寻 (更好地理解架构)
- k8s 核心概念
- Pod 使用 存在意义 实现技术
- controller
- Service
- RBAC 安全控制模型
- Helm
- 搭建集群监控平台系统
- 搭建高可用k8s集群
- 在集群环境部署项目 打包 镜像 完整暴露端口
k8s的概念
全名:kubernetes
概述:
k8s是谷歌在2014年开源的容器化集群管理系统
使用k8s进行容器化应用部署
使用k8s利于应用扩展
k8s目标实施让部署容器化应用更加简洁和高效
容器化带环境安装
docker 能做到,多数是单机版,集群不是很方便
k8s 可以解决docker中不方便的地方
擅长自动化部署、大规模
特性:
自动装箱
自我修复(自愈能力)
水平扩展
服务发现
滚动更新
版本回退
密钥和配置管理
存储编排
批处理
架构:
Master node 主控节点
- apiserver 集群统一入口,以restful方式,交易etcd存储
- sheduler 节点调度,选择node节点应用部署
- controller-manager 集中中常规的后台任务,一个资源对应一个控制器
- etcd 存储,用于保存集群里面相关的数据
Work node 工作节点
- kubelet master派到node节点的代表,管理本机容器
- kube-proxy 提供网络代理,负载均衡等操作。
Work node 工作节点
核心概念:
pod k8s中最小的部署单元, 是一组容器的集合 一个pod组中的容器是共享网络的,生命周期是短暂的
controller
- 确保预期副本数量
- 无状态应用部署
- 有状态应用部署
- 确保所有node 运行同一个 pod
- 一次性任务和定时任务
service - 定义一组pod的访问规则
k8s搭建
k8s平台规划
单master集群
多master集群
k8s硬件配置要求
测试环境
系统:centos-7.0 版本 禁用swap
master: 双核 内存4G 硬盘 20G
node:4核 同存8G 硬盘 40G
生产环境
master: 8核 内存16G 硬盘 100G
node:16核 内存64G 硬盘 500G
系统初始化操作
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's@enforcing@disabled@' /etc/selinux/config
swapoff -a
sed -ri 's@.*swap@#&@' /etc/fstab
hostnamectl set-hostname <hostname>
# 只在master点上面添加
cat > /etc/hosts << EOF
192.168.8.11 master
192.168.8.21 node1
192.168.8.22 node2
EOF
# 将桥接的ipv4流量传到iptable 链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
EOF
sysctl --system
yum -y install ntpdate
ntpdate time.windows.com
k8s部署方式
kubeadm 部署工具
快速 ,应用广泛
步骤:
- 安装3台虚拟机,centos 7
- 系统初始化,参考上面
- 安装dockter
# 安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum makecache
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker
systemctl start docker
安装 kubectl kubeadm kubelet
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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum -y install kubectl-1.18.0-0 kubeadm-1.18.0-0 kubelet-1.18.0
# 在master 节点初始化
kubeadm init --apiserver-advertise-address=192.168.8.11 --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
# 在node 节点安装插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 可以将文件下载到本地,然后再执行
# 创建 pod
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看pod 及端口
kubectl get pod,svc
1.创建一个Master节点,kubeadm init
2.将Node节点加入到当前集群中 kubeadm join <Master 节点的IP和端口>
二进制包方式
部署麻烦 ,更好学习,便于后期维护
一主一备
1. 安装操作系统 ,初始化
2. 系统初始化,参考上一步
3. 为etcd 和api-server 自签证书 #准备使用cfssl证书进行签发,是使用json文件生成证书,相比openssl 更方便使用
4. 部署etcd集群
server-csr.json
ca-config.json
ca-csr.json
5. 部署master组件 apiserver controll-manager schedule etcd docker
6. 部署node组件 kubelet kube-proxy docker etcd
7. 部署集群网络插件
8.