容器技术之kubernetes集群管理工具的简介以及部署

一、Kubernetes的简介

(一)什么是Kubernetes

Kubetnetes简称为k8s
k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。

k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。

k8s的全生命周期管理:
在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。

k8s的来源:
k8s是Kubernetes的缩写,源自谷歌的Borg,Borg是谷歌公司的内部容器管理系统。Borg系统运行几十万个以上的任务,来自几千个不同的应用,跨多个集群,每个集群(cell)有上万个机器。

它通过管理控制、高效的任务包装、超售、和进程级别性能隔离实现了高利用率。它支持高可用性应用程序与运行时功能,最大限度地减少故障恢复时间,减少相关故障概率的调度策略。该项目的目的是实现资源管理的自动化以及跨多个数据中心的资源利用率最大化。Kubernetes项目的目的就是将Borg最精华的部分提取出来,使现在的开发者能够更简单、直接地应用。它以Borg为灵感,但又没那么复杂和功能全面,更强调了模块性和可理解性。

k8s能干什么呢?

自动化容器的部署和复制
随时扩展或收缩容器规模
将容器组织成组,并且提供容器间的负载均衡
很容易地升级应用程序容器的新版本
提供容器弹性,如果容器失效就替换它

K8S有两个分类
(1)自主式pod:自我管理的,创建以后,仍然是提交给API Server,由API Server接收后借助Scheduler将其调度到指定的node节点,然后由node启动此节点,如果有pod中容器出现问题了,需要重启容器,那是由Keepalived来完成,但是如果节点故障了,pod也就消失了,所以,它有这样的坏处,没办法实现全局的调度,所以建议使用第二种pod

(2)控制器管理的pod,正是控制器这种机制的使用,使得在K8S上的集群设计中,pod完全就可以叫做有生命周期的对象,而后由调度器调度到集群中的某节点,运行以后,它的任务终止也就随着被删除掉,但是有一些任务,大家知道传统上有nginx、tomcat,它们是做为守护进程运行的,那么这种运行为pod容器的话,我们要确保它是时刻运行的,一旦出现故障我们要第一时间发现,要么是重建取代它,要么是重启,那么pod控制器就可以观测并实现

(二)设计架构

https://www.processon.com/view/5d579322e4b0869fa417e492?fromnew=1

在这里插入图片描述
在这里插入图片描述
k8s的核心组件
Kubernetes遵循master-slave architecture。Kubernetes的组件可以分为管理单个的 node 组件和控制平面的一部分的组件。

Kubernetes Master是集群的主要控制单元,用于管理其工作负载并指导整个系统的通信。Kubernetes控制平面由各自的进程组成,每个组件都可以在单个主节点上运行,也可以在支持high-availability clusters的多个主节点上运行。
在这里插入图片描述
kubelet需要安装在所有的节点上在这里插入图片描述
Kubernetes做了什么

Kubernetes优秀的分布式架构设计,给我们提供了众多了可扩展接口,可以让我们很方便的扩展自己的运行时、网络和存储插件,同时还可以通过CRD管理我们自己的分布式应用。它的声明式配置方式可以让我们利用Kubernetes的原语快速的编排出一个云原生应用。

Kubernetes的资源隔离也能保证对集群资源的最大化和最优利用率。

下图中展示了Kubernetes中的资源隔离层次。
在这里插入图片描述
容器
Pod:命名空间的隔离,共享网络,每个Pod都有独立IP,使用Service Account为Pod赋予账户
Sandbox:是对最小资源调度单位的抽象,甚至可以是虚拟机
Node:网络隔离,每个节点间网络是隔离的,每个节点都有单独的IP地址
Cluster:元数据的隔离,使用Federation可以将不同的集群联合在一起
Kubernetes中的基本资源类型分成了三类:

部署:Deploymnt、StatefulSet、DaemonSet、Job、CronJob
服务:Service、Ingress
存储:PV、PVC、ConfigMap、Secret
在最近一届的KubeCon & CloudNativeCon上Operator已经变得越来越流行。下面是OpenEBS的一个使用Operator的例子。

二、K8s的部署

注意-
首先将之前docker swarm部署的集群leave
docker swarm leave

(一)步骤

1、所有节点在部署过程中关闭selinux和firewalld服务。
2、所有节点需要部署docker引擎,我是再之前的docker之上部署k8s,所以已经部署好了,只需要从docker的集群中退出即可。
在这里插入图片描述
3、在企业7中,官方中告诉使用的引擎方法已经改变,需要在docker.json文件中添加配置文件,所有节点都需要修改:

{
“registry-mirrors”: [“https://1wz754td.mirror.aliyuncs.com”], ##此项为阿里云的镜像仓库地址
“exec-opt”: [“native.cgroupdriver=systemd”],
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”,
“storage-opts”: [
“overlay2.override_kernel_check=true”
]
}

在这里插入图片描述
4、所有节点关闭swap分区
步骤:
swapoff -a
vim /etc/fstab
在这里插入图片描述
4、配置yum源

[net]
name=net
baseurl=http://192.168.181.207/docker-ce
gpgcheck=0

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0

[iso]
name=iso
baseurl=http://192.168.181.207/rhel
gpgcheck=0

在这里插入图片描述
5、安装软件

[root@server1 yum.repos.d]# yum install -y kubelet kubeadm kubectl
部署节点设置kuberlet enalbe

在这里插入图片描述
在这里插入图片描述
6、配置

kubeadm config images list  #查看所需要的镜像
kubeadm config print init-defaults  #查看默认的配置
官网拉取不到镜像可以从阿里云拉取
kubeadm config images list  --image-repository  registry.aliyuncs.com/google_containers    # 查看阿里云镜像仓库
kubeadm config images  pull   --image-repository  registry.aliyuncs.com/google_containers  #从阿里云拉取镜像

server2和server3同时也要从阿里云拉取镜像
ubeadm config images  pull   --image-repository  registry.aliyuncs.com/google_containers  #拉取镜像

在这里插入图片描述
查看images
在这里插入图片描述
7、三台虚拟机拉去镜像至本地
在这里插入图片描述
在这里插入图片描述
8、集群的初始化

kubeadm init --pod-network-cidr=10.244.0.0/16   --image-repository  registry.aliyuncs.com/google_containers    #需要网络插件(初始化集群)

kubeadm join 192.168.181.224:6443 --token pfdx2m.50j0pvzgwjr0yte3 \
    --discovery-token-ca-cert-hash sha256:6806b7da2fcacea46b25d03a197cb462aeb06d5e8998f6fbfa1db342704321b0 
   #此命令初始化的时候生成,节点扩容server2和server3
注意kubeadm token list(只有24小时超过的话需要重新生成和添加)

在这里插入图片描述
在这里插入图片描述
server2和server3上执行

在这里插入图片描述
9、创建用户

创建一个用户来操作kube
useradd kubeadm  #创建用户
visudo

在这里插入图片描述
10、根据提示创建文件

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 node  #查看已经部署好的节点
echo "source <(kubectl completion bash )" >> ~/.bashrc   #让kubectl可以补命令

在这里插入图片描述
可以看懂server3
和reg.westos.org两个节点已经被添加进来
在这里插入图片描述
11、安装网络插件
官方文档进行查看
在这里插入图片描述
根据官网提示,新的版本需要使用github的yml文件进行拉取镜像:
https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml#L3
将下图中的内容编写进kube-flannel.yml文件中:
在这里插入图片描述
写入的格式为:

\vi kube-flannel.yml  #编辑文件,不使用这种办法会使得格式混乱
server1 server2和server3 #拉取镜像

12、拉取镜像

 kubectl apply -f kube-flannel.yml 

在这里插入图片描述
13、pod和node状态的查看

kubectl get pod -n kube-system   ###查看pod状态
kubectl get nodes    ###查看node状态

在这里插入图片描述

(二)、问题的处理

当遇到镜像拉取问题时候

kube-flannel-ds-amd64-xlzd6       0/1     Init:ErrImagePull   0          58s

在这里插入图片描述
有如下几种思路:
我的报错可以直接看出来就是镜像的拉取问题
1、删除报错的pod之后再查看:

[kubeadm@server1 ~]$ kubectl delete pod kube-flannel-ds-amd64-rw9n5 -n kube-system

我的删除完成之后发现依旧还有此问题:
在这里插入图片描述
2、我查看了kube-flannel.yml文件,发现有image之后的域名都是如下,但是手动使用此域名拉取镜像是不成功的。quay.io/coreos/flannel:v0.11.0-s390。
网上查资料以及前辈的指导,将quay.io更换为
quay-mirror.qiniu.com/coreos/flannel
3、查看之后发现pod和node均已经正常;
在这里插入图片描述

三、Pod管理

kubectl taint nodes --all node-role.kubernetes.io/master-   让master加入调度

(一)查看token

kubeadm token list   ##查看tonke剩余的生效时间

在这里插入图片描述
失效之后可以重新生成:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'    #查看加密,生成新的token需要
kubeadm token  create  ### 生成token

(二)pod的管理

在这里插入图片描述
如何创建
在这里插入图片描述

(Ⅰ)创建内部访问pod

1、运行服务

kubectl run nginx --image=nginx --replicas=2 --record 

在这里插入图片描述
2、查看运行的服务

kubectl get pod -o wide

在这里插入图片描述
3、设置端口映射、开启容器并进行当问

 kubectl expose deployment nginx --port=80 --target-port=80
 kubectl run test  -it --image=busybox --restart=Never
 wget -O - -q http://nginx

在这里插入图片描述

(Ⅱ)创建外部访问pod
第一种方法: kubectl expose deployment nginx --port=80 --target-port=80  --type=Nodeport  #直接可以用命令来指定
第二种办法;编辑文件:
kubectl edit svc nginx  #编辑文件 将type=Nodeport
kubectl describe svc nginx   #查看

==如果是在原有的基础上更改的话,就需要使用方法二,修改type为 NodePort
在这里插入图片描述

在这里插入图片描述
访问任意一份server都可以
在这里插入图片描述
在这里插入图片描述

方法二:创建的时候直接使用命令提前设置好

kubectl expose deployment nginx --port=80 --target-port=80  --type=NodePort
(三)pod的扩容和缩减

扩容和缩减都使用参数–replicas后面跟几个就总容量为几

kubectl scale deployment nginx --replicas=3
(四)pod的更新和回滚

更新使用命令

kubectl set image deployment/nginx nginx=需要的版本号

回滚使用命令

kubectl rollout undo deployment nginx --to-revision=1

后面的1意思是查看更新时的历史记录的序号

kubectl rollout history deployment nginx

deployment.apps/nginx 
REVISION  CHANGE-CAUSE
1         kubectl run nginx --image=nginx --replicas=2 --record=true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值