K8s---kubernetes部署

目录

Kubernetes简介

Kubernetes的好处:

kubernetes设计架构

​ Kubernetes主要由以下几个核心组件组成:

Kubernetes部署 


Kubernetes简介

  • 在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。
  • Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
  • Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

Kubernetes的好处:

  1. 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
  2. 服务高可用、高可靠。
  3. 可将负载运行在由成千上万的机器联合而成的集群中。

kubernetes设计架构

Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。

K8s---kubernetes部署_第1张图片 Kubernetes主要由以下几个核心组件组成:

  • etcd:保存了整个集群的状态
  • apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
  • controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
  • scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
  • kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
  • Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
  • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns:负责为整个集群提供DNS服务
  • Ingress Controller:为服务提供外网入口
  • Heapster:提供资源监控
  • Dashboard:提供GUI
  • Federation:提供跨可用区的集群
  • Fluentd-elasticsearch:提供集群日志采集、存储与查询

 Kubernetes设计理念和功能其实就是一个类似Linux的分层架构

K8s---kubernetes部署_第2张图片 

  • 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
  • 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
  • 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
  • 接口层:kubectl命令行工具、客户端SDK以及集群联邦
  • 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴 Kubernetes

               外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等 Kubernetes

              内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等 


Kubernetes部署 

实验前准备项:
server1:

cd harbor/
ls
docker-compose ps
docker-compose start

K8s---kubernetes部署_第3张图片

server2

docker node ls
docker stack rm web 
docker service ls

K8s---kubernetes部署_第4张图片

server3、4

docker swarm leave 

server2

docker swarm leave --force 

server3:

cd /etc/systemd/system/docker.service.d/
ls
rm -f 10-machine.conf 
systemctl daemon-reload 
systemctl restart docker

真机输入命令:

iptables -t nat -I POSTROUTING -s 172.25.70.0/24 -j MASQUERADE 
#联网

禁用swap

server2 3 4:

swapoff -a
vim /etc/fstab 
  #注释掉最后一行

设定docker cgroup driver为systemd

server2:

cd /etc/docker/
ls
vim daemon.json 
systemctl daemon-reload 
systemctl restart docker
rm -f *.pem
systemctl stop docker
systemctl stop docker.socket 
systemctl start docker.socket
systemctl start docker.service 
docker info
systemctl enable docker.socket 
systemctl enable docker.service

K8s---kubernetes部署_第5张图片K8s---kubernetes部署_第6张图片

server3:

systemctl enable docker.socket 
systemctl enable docker.service

server2:

scp daemon.json server3:/etc/docker/
scp daemon.json server4:/etc/docker/

K8s---kubernetes部署_第7张图片

server3:

systemctl daemon-reload 
systemctl restart docker
systemctl stop docker
systemctl stop docker.socket 
systemctl start docker.socket 
systemctl start docker.service
docker info 

K8s---kubernetes部署_第8张图片

server4

systemctl daemon-reload 
systemctl restart docker
docker info

K8s---kubernetes部署_第9张图片

server3:

cd /etc/sysctl.d/
scp docker.conf server4:/etc/sysctl.d/

server4:

cd /etc/sysctl.d/
sysctl --system
docker info

K8s---kubernetes部署_第10张图片

编辑k8s安装软件仓库文件

server2

cd /etc/yum.repos.d/
vim k8s.repo
  [kubernetes]
  name=Kubernetes
  baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  enabled=1
  gpgcheck=0
yum install -y kubelet kubeadm kubectl
scp k8s.repo server3:/etc/yum.repos.d/
scp k8s.repo server4:/etc/yum.repos.d/

K8s---kubernetes部署_第11张图片

server3、4

yum install -y kubelet kubeadm kubectl

K8s---kubernetes部署_第12张图片

K8s---kubernetes部署_第13张图片 

k8s集群设置免密操作

server2

systemctl enable --now kubelet  
#设置开机自启
ssh-keygen 
ssh-copy-id server3
ssh-copy-id server4
ssh server3 systemctl enable --now kubelet
ssh server4 systemctl enable --now kubelet

K8s---kubernetes部署_第14张图片K8s---kubernetes部署_第15张图片

server3测试开机自启是否设置成功

systemctl is-enabled kubelet.service 

使用 kubeadm 创建集群

server2

kubeadm config print init-defaults 
//查看默认配置信息
cd

kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
//列出所需镜像

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers 
//拉取镜像

K8s---kubernetes部署_第16张图片K8s---kubernetes部署_第17张图片

网页: 在私有仓库中建立新项目:k8s(一定要点击公开)

K8s---kubernetes部署_第18张图片

docker login reg.westos.org
docker images | grep registry
docker images | grep k8s
docker images | grep k8s | awk '{system("docker push "$1":"$2"")}'
#把镜像下载到私有仓库中(k8s)

K8s---kubernetes部署_第19张图片K8s---kubernetes部署_第20张图片

网页:刷新可以看到刚上传的镜像

K8s---kubernetes部署_第21张图片

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository
//初始化集群(路径不能改,要求)【所有组件设置开机自启】

ll /etc/kubernetes/admin.conf

export KUBECONFIG=/etc/kubernetes/admin.conf  
#部署设置变量、赋值(重启就没了)

vim .bash_profile  
#把赋值的命令写入这个文件

kubectl get node 
#可以看到已经添加了,但是没有就绪

kubectl get pod -n kube-system
#可以看到有两个pod是pending状态,没有运行

kubectl get pod -n kube-system -o wide
#可以看到刚才没有运行的pod是准备状态,需要先部署网络组建通信

wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
#下载官方的网络插件【站点不稳定,需要多下载两次】
ls

vim kube-flannel.yml
#把里面的镜像在server1上拉取

K8s---kubernetes部署_第22张图片 K8s---kubernetes部署_第23张图片

K8s---kubernetes部署_第24张图片

拉取镜像
server1:

docker pull rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
docker pull rancher/mirrored-flannelcni-flannel:v0.16.1

K8s---kubernetes部署_第25张图片

网页新建rancher项目,一定要点击公开

K8s---kubernetes部署_第26张图片

改名、上传镜像到私有仓库的指定目录
server1

docker tag rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0 reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
docker push reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0 

docker tag  rancher/mirrored-flannelcni-flannel:v0.16.1 reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.16.1
docker push reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.16.1

K8s---kubernetes部署_第27张图片

网页在自己私有仓库可以看到刚上传的镜像

K8s---kubernetes部署_第28张图片

server2
配置kubectl命令补齐功能:

echo "source <(kubectl completion bash)" >> ~/.bashrc
source .bashrc
kubectl apply -f kube-flannel.yml 

K8s---kubernetes部署_第29张图片

日志:可以看到有匿名拉取镜像

K8s---kubernetes部署_第30张图片

server2

kubectl get pod -n kube-system 
#可以看到全部都running了

kubectl get node
#可是ready的状态

K8s---kubernetes部署_第31张图片

server3、4

kubeadm join 172.25.70.2:6443 --token n8zkol.9pv1fm97l1hi0zud --discovery-token-ca-cert-hash sha256:b53a6c0e7536a304d91ac47db4154eb19b1f707b1165c3a1b91c2a12d3dae1d1
#从仓库下载镜像;--token在触发集群的时候默认24小时(之后要是相加节点要重新创建token)

K8s---kubernetes部署_第32张图片K8s---kubernetes部署_第33张图片

日志:可以看到有匿名拉取镜像

K8s---kubernetes部署_第34张图片

server2

kubectl get node
kubectl get pod -n kube-system 
#可以看到全running

kubectl get pod -n kube-system -o wide
#-o可以看到pod运行在哪些节点上

K8s---kubernetes部署_第35张图片

 

你可能感兴趣的:(kubernetes,docker,容器)