kubernetes介绍:

kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

K8s的中文社区网站:正不正规不确定,但是写的内容可以参考 http://docs.kubernetes.org.cn/


kubernetes组件:

在这里插入图片描述

•Kubernetes 组件:
  Kubernetes Master控制组件,调度管理整个系统(集群),包含如下组件:
  1.Kubernetes API Server
    作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。
  2.Kubernetes Scheduler
    为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。
  3.Kubernetes Controller
    负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。
  4. Replication Controller
    管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。
  5. Node Controller
    管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。
  6. Namespace Controller
    管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。
  7. Service Controller
    管理维护Service,提供负载以及服务代理。
  8.EndPoints Controller
    管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。
  9. Service Account Controller
    管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。
  10. Persistent Volume Controller
    管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。
  11. Daemon Set Controller
    管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。
  12. Deployment Controller
    管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。
  13.Job Controller
    管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目
  14. Pod Autoscaler Controller
    实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。

•Kubernetes Node运行节点,运行管理业务容器,包含如下组件:
  1.Kubelet
    负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。
  2.Kubernetes Proxy
    负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。
  3.Docker
    Node上需要运行容器服务


kubernetes安装:

软件包: https://mirrors.aliyun.com/kubernetes/yum/repos/

软件下载可以指定yum源为上面这个目录,然后yum install -y kubeadm,kubelet,kubectl

默认下载的软件是最新版本,这里因为会有依赖性,而且我又已经找好了1.15.0版本的解决依赖性的包,所以我下载时加了版本,指定下载1.15.0版本的软件。
在这里插入图片描述
镜像:
在这里插入图片描述

环境准备:
server1:172.25.12.1:manager节点

server2:172.25.12.2:work节点

server3:172.25.12.3:work节点

1.首先在三台节点将docker的部署清理,确保docker环境的纯净:

docker ps   #为空
docker ps -a   #为空**加粗样式**
docker network   #只有默认三种网络
docker volume ls   #为空
管理节点上 docker service ls  #为空
#如果不为空,执行对应的rm指令删除即可。

2.三台节点关闭swap

swapoff -a 
vim /etc/fstab  #注释掉swap自动挂载

3.三台节点将上面的rpm包都yum安装,将tar包镜像docker load -i 镜像名全部导入docker

yum install -y *
for i in *.tar; do docker load -i $i ; done
#这里注意所在目录,我在rpm包的目录执行第一条指令
#在tar包目录执行的第二条命令 
#可以一个一个下载和导包,作者这里图方便

!portainer/agent 这个镜像不是
在这里插入图片描述
4.根据官网说明,关闭iptables的相关状态。【三台节点】

  vim /etc/sysctl.d/k8s.conf  

在这里插入图片描述

使状态变为如下:
在这里插入图片描述
5.三台节点:开启kubelet

systemctl enable kubelet #开机自动启动
systemctl start kubelet  #开启服务

!!注意,这里服务其实是开不起来的,会处于一直自动开启中,但起不来的状态。

!!我docker是开启状态,且纯净,以上都是在docker正常的基础上搭建的环境,下面进入k8s的正式集群搭建


kubernetes集群搭建:

1.管理节点初始化

mkdir -p /etc/systemd/system/docker.service.d
在server1: kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.25.12.1
#初始化,添加网络插件,指定网络驱动,并指定管理节点IP

成功会显示下面内容。
注意:如果出现Cgroup警告,可以不理会,警告不会影响实验,更改后会造成cgroup和systemd的两处不匹配,解决不当会使kubelet无法开启。
另外:如果/etc/systemd/system/docker.service.d/下有10-machine.conf这个认证文件,可将其移动到/mnt目录中

在这里插入图片描述

2. 开启kubelet服务,加入集群

三台节点:

systemctl daemon-reload  #重新加载daemon
systemctl restart docker   # 重起docker

kubeadm join 172.25.12.1:6443 --token jdipfs.00iop0yfvc34s5tg     --discovery-token-ca-cert-hash sha256:d652eaa71b046b83b62de4cb380d3f30fb620474559fedc8c6624cf8aeb4def6
 #加入集群,这里要根据初始化成功后的指令执行,注意看上面的一张图

3.创建普通用户,进行集群管理

server1:

useradd kubeadm
vim /etc/sudoers   #赋予普通用户sudo的执行权限,因为下面要在普通用户下执行指令

在这里插入图片描述

su - kubeadm  #切换用户
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes   #k可以查看到其他已经加入的节点,但是状态是notreaddy #没有加入到同一网络中

#上面三条指令完全复制粘贴,在管理节点初始化成功后出现的。

!!这里一定要注意所处用户,是普通用户。生成的config文件为集群管理文件,这里我们用普通用户去管理是为了安全。

!!这里如果出现8080报错:就去看看当前用户下的上面mkdir创建的目录中有没有config文件,或者是否所处用户正确。
The connection to the server localhost:8080 was refused - did you specify the right host or port?

4. 网络配置

这里网络使用的是flanner,需要flannel.tar包镜像,以及kube-flannel.yml文件,来部署一个网络。镜像可以在阿里云上搜索拉取,yml文件建议去网上找。

三台节点:

docker load -i flanner.tar   #导入镜像

导入完成后:
server1:

cp kube-flannel.yml /home/kubeadm/  #将文件发送给普通用户
su - kubeadm   #用户切换
kubectl apply -f kube-flannel.yml  #加载文件
echo "source <(kubectl completion bash)" >> .bashrc  #使可以tab补齐
exit  #退出
su - kubeadm   #用户切换
kubectl get nodes   # 正常
systemctl status kubelet   #服务正常
kubectl get pods --all-namespaces  #都处于ready1/1

在这里插入图片描述
这样集群配置就完成了。但是k8s的指令相当得多,不便记忆。下面将继续配置可视化web管理。


可视化插件

这里我从官网找到了镜像包以及yaml部署文件。

在这里插入图片描述
先将tar包镜像导入到三个节点的docker容器中。docker load -i tar包

然后:
kubectl create -f kubernetes-dashboard.yaml  #创建一个资源
kubectl get deployments. -n kube-system   #查看已经创建的部署
#有一个kubernetes-dashboard和两个coredns

在这里插入图片描述

kubectl edit service kubernetes-dashboard -n kube-system  
#编辑可视化资源服务,将倒数第三行的type参数改为:NodePort
kubectl describe svc kubernetes-dashboard -n kube-system
#查看可视化资源服务配置,出现NodePort:  端口/TCP

在这里插入图片描述

在这里插入图片描述

这里出现的端口,下面要用于web图形化访问
现在可以在浏览器上试探访问:
https://172.25.12.1:端口
登陆需要令牌,下面生成令牌。

在这里插入图片描述

vim dashboard-admin.yaml   #下面为写在文件中的内容
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

kubectl create -f dashboard-admin.yaml  
#根据yaml文件部署可视化管理 #运行结束会显示管理用户已创建
kubectl apply -f dashboard-admin.yaml   #更新应用
kubectl get secrets -n kube-system | grep admin #过滤出管理token-id
kubectl describe secrets admin-user-token-id -n kube-system  #过滤出token即令牌

在这里插入图片描述


网页登陆:

在这里插入图片描述

在这里插入图片描述


英文转中文:根据下图步骤,添加中文,刷新页面,自动转化为中文。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


                               大大的小小阳
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐