目录
1. Kubernetes简介与架构
1.1 Kubernetes简介
1.2 kubernetes设计架构
2. 环境的清理
3. Kubernetes部署
3.1 所有节点部署docker引擎
3.2 禁用swap分区
3.3 安装部署软件kubeadm
3.4 查看默认配置信息
3.5 修改镜像仓库
3.6 初始化集群
3.7 Master查看状态
3.8 安装flannel网络组件(先配置再安装网络组件)
3.9 配置kubectl命令补齐功能
3.10 节点扩容
3.11 kubectl命令指南
1.1 Kubernetes简介
在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。 Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。 Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。 Kubernetes的好处: 隐藏资源管理和错误处理,用户仅需要关注应用的开发。 服务高可用、高可靠。 可将负载运行在由成千上万的机器联合而成的集群中。
1.2 kubernetes设计架构
Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。
Kubernetes主要由以下几个核心组件组成:
- etcd:保存了整个集群的状态
- apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
- controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
- scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
- kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
- Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
- kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡
除了核心组件,还有一些推荐的Add-ons:
- kube-dns:负责为整个集群提供DNS服务
- Ingress Controller:为服务提供外网入口
- Heapster:提供资源监控
- Dashboard:提供GUI
- Federation:提供跨可用区的集群
- Fluentd-elasticsearch:提供集群日志采集、存储与查询
Kubernetes设计理念和功能其实就是一个类似Linux的分层架构
核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
接口层:kubectl命令行工具、客户端SDK以及集群联邦
生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
- Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
- Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等
3.1 所有节点部署docker引擎
- - 关闭节点的selinux和iptables防火墙 所有节点部署docker引擎 (之前做过直接看截图即可) # yum install -y docker-ce docker-ce-cli # vim /etc/sysctl.d/docker.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 # sysctl --system # systemctl enable docker # systemctl start docker - 官网:https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker - # vim /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", ] } # systemctl daemon-reload # systemctl restart docker
3.2 禁用swap分区
- 禁用swap分区: # swapoff -a 注释掉/etc/fstab文件中的swap定义
[root@server3 ~]# swapon -s Filename Type Size Used Priority /dev/dm-1 partition 1572860 0 -2 [root@server3 ~]# swapoff -a [root@server3 ~]# vim /etc/fstab [root@server3 ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Thu Dec 31 18:38:54 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel-root / xfs defaults 0 0 UUID=a31aabff-3bbf-4e8a-90eb-f1b494de384f /boot xfs defaults 0 0 #/dev/mapper/rhel-swap swap swap defaults 0 0 [root@server3 ~]# swapon -s server2.4同理
3.3 安装部署软件kubeadm
[root@server2 yum.repos.d]# ls CentOS-Base.repo docker.repo redhat.repo rhel7.6.repo [root@server2 yum.repos.d]# cat CentOS-Base.repo | grep enabled ##没用的仓库先禁用掉,因为相互之间的依赖会影响 [root@server2 yum.repos.d]# vim k8s.repo [root@server2 yum.repos.d]# cat k8s.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 [root@server2 yum.repos.d]# yum repolist [root@server2 yum.repos.d]# yum install -y kubelet kubeadm kubectl ##安装k8s软件 [root@server2 yum.repos.d]# systemctl enable --now kubelet.service ##设置开机自启动 ##为server3和server4配置仓库 [root@server2 yum.repos.d]# scp k8s.repo server3:/etc/yum.repos.d/ [root@server2 yum.repos.d]# scp k8s.repo server4:/etc/yum.repos.d/ ##server3和4安装并启动k8s [root@server3 yum.repos.d]# yum install -y kubelet kubeadm kubectl [root@server3 ~]# systemctl enable --now kubelet.service [root@server4 yum.repos.d]# yum install -y kubelet kubeadm kubectl [root@server4 ~]# systemctl enable --now kubelet.service
3.4 查看默认配置信息
[root@server2 ~]# kubeadm config print init-defaults
3.5 修改镜像仓库
- 默认从k8s.gcr.io上下载组件镜像,需要才可以,所以需要修改镜像仓库: - # kubeadm config images list --image-repository registry.aliyuncs.com/google_containers //列出所需镜像 # kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers //拉取镜像 # kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.20.2 ##可以指定kubernetes的版本参数 docker images | grep registry.aliyuncs.com 将镜像添加到私有仓库
3.6 初始化集群
- # kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers //初始化集群 --pod-network-cidr=10.244.0.0/16 //使用flannel网络组件时必须添加 --kubernetes-version //指定k8s安装版本
[root@server2 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers ##生成的加入集群的命令 kubeadm join 172.25.13.2:6443 --token ca3esn.f4h8djsl6cdvhw19 \ --discovery-token-ca-cert-hash sha256:9e80ead05c9fb466665e6c89023771fdabcddc8d8ac2b8c3b7d13252750e4fdd
3.7 Master查看状态
# kubectl get cs # kubectl get node ##查看节点是否准备好 # kubectl get pod -n kube-system ##查看系统运行状态 # kubectl get ns ##查看namespace # master删除docker之后需要重新初始化!!
3.8 安装flannel网络组件(先配置再安装网络组件)
- flannel网络组件 - 下载官网:https://github.com/coreos/flannel - 安装命令如下:(可以外网下载,我先用本地下载好的) - $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml - 其他网络组件: https://kubernetes.io/zh/docs/concepts/cluster-administration/addons/
[root@server2 ~]# ll kube-flannel.yml -rwxr-xr-x 1 root root 14366 Jan 30 15:56 kube-flannel.yml [root@server2 ~]# kubectl apply -f kube-flannel.yml 将镜像push到私有仓库
查看是否running
3.9 配置kubectl命令补齐功能
[root@server2 ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
3.10 节点扩容
[root@server3 ~]# kubeadm join 172.25.13.2:6443 --token ca3esn.f4h8djsl6cdvhw19 \ > --discovery-token-ca-cert-hash sha256:9e80ead05c9fb466665e6c89023771fdabcddc8d8ac2b8c3b7d13252750e4fdd ##执行的是server2初始化集群生成的token [root@server4 ~]# kubeadm join 172.25.13.2:6443 --token ca3esn.f4h8djsl6cdvhw19 \ > --discovery-token-ca-cert-hash sha256:9e80ead05c9fb466665e6c89023771fdabcddc8d8ac2b8c3b7d13252750e4fdd
3.11 kubectl命令指南
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands