kubernetes|Kubernetes(k8s)---(1)集群部署

目录
一、Kubernets简介
1.1 Kubernetes优点
1.2 Kubernetes架构设计
1.3 kubernete服务架构
二、Kubernetes部署
2.1 基本环境配置
【kubernetes|Kubernetes(k8s)---(1)集群部署】 2.2 禁用swap分区
2.3 配置kubernetes的yum源,并安装组件
2.4 设置kubernetes命令补全功能
2.5 初始化集群
2.6 master端配置kubectl
2.7 安装网络组件
2.8 节点的删除与恢复
三 、Kubectl命令
一、Kubernets简介 Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合, 将最终的应用服务交给用户。
1.1 Kubernetes优点 ? 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
? 服务高可用、高可靠。
? 可将负载运行在由成千上万的机器联合而成的集群中
1.2 Kubernetes架构设计 Kubernetes集群包含代理节点kubelet和master组件(API、scheduler、etc),但都是基于分布式存储系统。
kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 1kubernetes的架构
核心组件:etcd、apiserver、controller manager、scheduler、kubelet、container runtime、kube-proxy。
? etcd:保存了整个集群的状态
? apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
? controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
? scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
? kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
? Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
? kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡

其他推荐添加的add-ones:
? kube-dns:负责为整个集群提供DNS服务
? Ingress Controller:为服务提供外网入口 ? Heapster:提供资源监控
? Dashboard:提供GUI ? Federation:提供跨可用区的集群 ? Fluentd-elasticsearch:提供集群日志采集、存储与查询
1.3 kubernete服务架构 与Linux相同,采用分层式的微架构服务
kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 2 kubernetes的层次结构 ? 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
? 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服 务发现、DNS解析等)
? 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动 态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
? 接口层:kubectl命令行工具、客户端SDK以及集群联邦
? 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
? Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、 OTS应用、ChatOps等
? Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等
更多资料可查看:Kubernetes 是什么? | Kubernetes

二、Kubernetes部署 官方部署文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
2.1 基本环境配置: ? 基于redhat7.6的3台基础服务--server1(master) server2 server3
? 所有主机均关闭节点的selinux和iptables防火墙
? 所有节点部署docker引擎、设置k8s的网络配置、重启服务

##yum仓库提前配置好,配置文件可以根据docker在编写时进行配置,或者参考aliyu.com即可配置完成##安装docker [root@server1 ~]# yum install -y docker-ce docker-cli##编写k8s的配置文件 [root@server1 ~]# vim /etc/sysctl.d/k8s.conf####内容##### net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 ##服务重载 [root@server1 ~]# sysctl --system##重新配置docker引擎 [root@server1 ~]# vim /etc/docker/daemon.json####内容#### { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] }##设置docker服务开启自启 [root@server1 ~]# systemctl enable docker --now

kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图3 设置网关
kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 4 设置docker驱动 2.2 禁用swap分区
##所有节点禁用swap分区 [root@server1 ~]# swapoff -a##禁用/etc/fstab文件中的swap定义 [root@server1 ~]# vim /etc/fstab [root@server1 ~]# tail -1 /etc/fstab #UUID=2a714265-f92d-4429-87da-9f09e32e6ff2 swapswapdefaults0 0

kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 5 设置swap禁用
2.3 配置kubernetes的yum源,并安装组件
###kubernetes的yum源: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#configure-cgroup-driver-used-by-kubelet-on-control-plane-node##编写配置文件 [root@server1 ~]# vim /etc/yum.repos.d/kubernetes.repo####文件内容#### [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0###安装kubelet kubeadm kubectl [root@server1 ~]# yum install -y kubelet kubeadm kubectl##设置开机自启 [root@server1 ~]# systemctl enable --now kubelet##查看默认配置基础信息 [root@server1 ~]# kubeadm config print init-defaults##列出所需镜像 [root@server1 ~]# kubeadm config images list --image-repository registry.aliyuncs.com/google_containers##拉去相应的镜像 [root@server1 ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers##查看获取的镜像 [root@server1 ~]# docker images##非控制节点只需要获取一下三个镜像即可 google_containers/kube-proxy、google_containers/coredns、google_containers/pause ##相应的image进行打包-->传送给server2和server3-->解压上传给docker image[root@server1 ~]# docker save registry.aliyuncs.com/google_containers/kube-proxy registry.aliyuncs.com/google_containers/coredns registry.aliyuncs.com/google_containers/pause> node.tar[root@server2 ~]# docker load -i node.tar [root@server2 ~]# docker load -i node.tar

kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 6 开启kubelet.service
kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 7 查看所需要的images

kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 8 下载相应的iamges 2.4 设置kubernetes命令补全功能
##kubernetes命令补全 [root@server1 ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc [root@server1 ~]# source .bashrc

kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 9 设置命令行补全 2.5 初始化集群
##在管理端初始化集群[root@server1 ~]# 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@server1 ~]# kubeadm reset

注意:token有时效24h,超过时需要生成新的token
生成新的token:
kubeadm token create
查看新的哈希码:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'
kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 10 初始化服务 kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 11 查看相应的添加集群的方式 2.6 master端配置kubectl
##添加kubeadm用户,并设置相应权限 [root@server1 ~]# useradd kubeadm [root@server1 ~]# vim /etc/sudoers####设置的kubeadm权限#### kubeadmALL =(ALL)NOPASSWD:ALL##创建配置文件-->编写配置文件-->设置文件权限 [root@server1 ~]# vim /etc/sudoers[root@server1 ~]# su - kubeadm [kubeadm@server1 ~]$ mkdir -p $HOME/.kube [kubeadm@server1 ~]$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config cp: cannot open ‘/etc/kubernetes/admin.conf’ for reading: Permission denied [kubeadm@server1 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [kubeadm@server1 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config##root用户只需要执行 [kubeadm@server1 ~]$ vim ~/.bash_profile [kubeadm@server1 ~]$ export KUBECONFIG=/etc/kubernetes/admin.conf##查看集群节点 [kubeadm@server1 .kube]$ kubectl get node

kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 12 创建普通用户
kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 13 设置普通用户的权限
kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 14 查看所拥有的节点
2.7 安装网络组件
###从网络下载配置文件 [root@server1 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlmaster要配置及部署文件kube-fannel.ym,所有节点都要配置仓库的地址解析,及flannel软件组##查看组件状态必须所有组件running [root@server1 ~]# kubectl get pod --all-namespaces##其他网络安装 https://kubernetes.io/zh/docs/concepts/cluster-administration/addons/

kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 15 配置flannel网络组件
kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 16 查看配置的网络节点
kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 17 查看网络运行的基本信息
2.8 节点的删除与恢复
##在master端删除节点 [root@server1 ~]# kubectl drain server3 --delete-local-data --force --ignore-daemonsets [root@server1 ~]# kubectl delete node server3##非正常节点 [root@server1 ~]# kubeadm reset

三 、Kubectl命令 操作手册:https://kubernetes.io/docs/reference/generated/kubectl/kubectlcommands
kubectl get cs kubectl get node kubectl get pod -n kube-system kubectl get pod -o wide -n kube-system

kubernetes|Kubernetes(k8s)---(1)集群部署
文章图片
图 18 基础命令的应用

    推荐阅读