目录
一、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),但都是基于分布式存储系统。
文章图片
图 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相同,采用分层式的微架构服务
文章图片
图 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
文章图片
图3 设置网关
文章图片
图 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
文章图片
图 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
文章图片
图 6 开启kubelet.service
文章图片
图 7 查看所需要的images
文章图片
图 8 下载相应的iamges 2.4 设置kubernetes命令补全功能
##kubernetes命令补全
[root@server1 ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@server1 ~]# source .bashrc
文章图片
图 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/^.* //'
文章图片
图 10 初始化服务
文章图片
图 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
文章图片
图 12 创建普通用户
文章图片
图 13 设置普通用户的权限
文章图片
图 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/
文章图片
图 15 配置flannel网络组件
文章图片
图 16 查看配置的网络节点
文章图片
图 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
文章图片
图 18 基础命令的应用
推荐阅读
- Docker|Docker【6】| 让Docker炫起来
- docker|docker简介
- Docker|自己动手写Docker系列 -- 3.1构造实现run命令版本的容器
- docker|Docker镜像的仓库(Harbor)
- elasticsearch|使用docker安装elasticsearch和kibana
- 网络|《图解HTTP》阅读总结(上)
- 青龙面板+nolan-依赖+拉库+企业微信推送(手把手喂饭,各版本通用)
- Elasticsearch|Docker部署Elasticsearch集群并开启安全设置
- 中间件|解构云原生,从概念到落地(阿里云、声网、微博、好未来、CNCF 的专家们怎么看())