欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker -- k8s集群搭建

程序员文章站 2022-03-12 12:53:37
...

Kubernetes概述

k8s中文文档:https://www.kubernetes.org.cn/k8s
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

  • Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。

  • 现在Kubernetes着重于不间断的服务状态(比如web服务器或者缓存服务器)和原生云平台应用(Nosql),在不久的将来会支持各种生产云平台中的各种服务,例如,分批,工作流,以及传统数据库。

  • 在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器。

Kubernetes节点

我们把服务分为运行在工作节点上的服务和组成集群级别控制板的服务。Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制。每次个节点上当然都要运行Docker。Docker来负责所有具体的映像下载和容器运行。

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集群搭建

实验环境:(安装docker并开启)
docker1:172.25.254.2 (k8s-master)
docker2: 172.25.254.3 (k8s-node1)

  1. 安装相应软件
[[email protected] rpm]# ls
kubeadm-1.8.0-1.x86_64.rpm  kubelet-1.8.0-1.x86_64.rpm
kubectl-1.8.0-1.x86_64.rpm  kubernetes-cni-0.5.1-1.x86_64.rpm
[[email protected] rpm]# yum install -y *
  1. 关闭系统的交换分区
[[email protected] rpm]# swapoff -a
[[email protected] rpm]# vim /etc/fstab

[[email protected] rpm]# systemctl enable kubelet.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /etc/systemd/system/kubelet.service.

3同上
docker -- k8s集群搭建
3. 查看 kubeadm 会用到的镜像

kubeadm config images list 
I0323 16:49:02.001547 11145 version.go:93] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get https://dl.k8s.io/release/stable-1.txt: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 
I0323 16:49:02.001631 11145 version.go:94] falling back to the local client version: v1.12.2 
k8s.gcr.io/kube-apiserver:v1.12.2 
k8s.gcr.io/kube-controller-manager:v1.12.2 
k8s.gcr.io/kube-scheduler:v1.12.2 
k8s.gcr.io/kube-proxy:v1.12.2 
k8s.gcr.io/pause:3.1 
k8s.gcr.io/etcd:3.2.24 
k8s.gcr.io/coredns:1.2.2
  1. 导入需要的镜像
  2. 初始化
[[email protected] mnt]# vim kube-flannel.yml 
76 "Network": "10.244.0.0/16" 
[[email protected] mnt]# kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.25.19.1 

##执行下面的命令进行配置(注意这三个命令必须用k8s用户执行) 
[[email protected] mnt]# su - k8s 
[[email protected] ~]$ mkdir -p $HOME/.kube 
[[email protected] ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
[[email protected] ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 创建一个k8s用户,并授权,设置环境变量
[[email protected] mnt]# useradd k8s 
[[email protected] mnt]# vim /etc/sudoers 
92 k8s ALL=(ALL) NOPASSWD:ALL 
[[email protected] mnt]# vim /home/k8s/.bashrc 
source <(kubectl completion bash)' 
[[email protected] mnt]# su - k8s 
[[email protected] mnt]# yum install bash-* -y 
[[email protected] ~]$ kubectl 
##能补齐就好
  1. 在master部署flannel
[[email protected] mnt]# cp  kube-flannel.yml  /home/k8s
[[email protected] mnt]# su - k8s
[[email protected] ~]$ kubectl apply -f kube-flannel.yml 

[[email protected] ~]$ sudo docker ps   ##查看
  1. 部署node节点
[[email protected] mnt]# swapon -s 
[[email protected] mnt]# modprobe ip_vs_wrr 
[[email protected] mnt]# modprobe ip_vs_sh 
[[email protected] mnt]# kubeadm join 172.25.254.2:6443 --token a9ak4p.rtbve8n669je7ojj --discovery-token-ca-cert-hash sha256:f8509327ff23a0f0dc3dd5989ae82718a6287ea56aca7a695043ba0b33142fd3

  1. 在master节点查看节点信息,可以看到node1 已经加入集群了
[[email protected] ~]$ kubectl get nodes