目录
一、Kubernets简介
1.1 Kubernetes优点
1.2 Kubernetes架构设计
1.3 kubernete服务架构
二、Kubernetes部署
2.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),但都是基于分布式存储系统。
?
????????核心组件: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最核心的功能,对外提供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
?
?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 swap swap defaults 0 0
?
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
?
?
?
?2.4 设置kubernetes命令补全功能
##kubernetes命令补全
[root@server1 ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@server1 ~]# source .bashrc
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/^.* //'
2.6 master端配置kubectl
##添加kubeadm用户,并设置相应权限
[root@server1 ~]# useradd kubeadm
[root@server1 ~]# vim /etc/sudoers
####设置的kubeadm权限####
kubeadm ALL =(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
?
?
2.7 安装网络组件
###从网络下载配置文件
[root@server1 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
master要配置及部署文件kube-fannel.ym,所有节点都要配置仓库的地址解析,及flannel软件组
##查看组件状态 必须所有组件running
[root@server1 ~]# kubectl get pod --all-namespaces
##其他网络安装
https://kubernetes.io/zh/docs/concepts/cluster-administration/addons/
?
?
?
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
?
|