初识Kubernetes及快速安装

如果想要在Docker上部署大型应用,首先就是要解决网络的问题,还有一系列复杂的问题,包括集群管理,负载均衡等。此时就需要容器编排部署工具来解决这些问题。

一、容器编排部署工具

容器管理工具可以完成容器的基础管理,但是容器的应用并不是只能进行简单应用部署的,可以使用容器完成企业中更加复杂的应用部署,当需要对多应用的系统进行部署时,就需要更加复杂的工具来完成对容器运行应用的编排,这就是容器编排部署工具。

容器编排部署工具有:

(1)docker三剑客:docker machine、docker compose、docker swarm

(2)mesos+marathon

(3)kubernetes

二、Kubernetes介绍

 

kubernetes简称为k8s,8是因为k和s之间有8个字母,是谷歌内部的Borg系统的开源版本,也是目前主流的容器编排部署工具。

k8s是一个轻便的和可扩展的开源平台,用于管理多个主机上的容器化的应用,让部署容器化的应用简单并且高效,提供了应用部署、规划、更新、维护的一种机制,能进行应用的自动化部署及扩缩容。

 

如上图所示,k8s集群是Master和Worker的模式。

Master节点上有kube-apiserver、kube-controller-mansger、kube-scheduler以及etcd进程,分别用于接收客户端请求并控制集群、资源对象的控制中心并监控容器健康、资源调度、资源对象数据存储等功能。

Worker节点上有kubelet、kube-proxy、docker,分别用于管理Pod及Pod容器并定时向Master汇报节点资源信息、实现Service的透明代理及负载均衡、运行容器。

三、k8s主要功能介绍

(1)自动装箱

基于容器对应用运行环境的资源配置要求自动部署应用容器

(2)自我修复

当容器失败时,会对容器进行重启

当所部署的Node节点宕机时,会对容器进行重新部署和重新调度

当容器未通过监控检查时,会关闭此容器,直到容器正常运行时,才会对外提供服务。

(3)水平扩展

通过简单的命令、用户UI界面或基于CPU等资源使用情况,对应用容器进行扩容或缩容

(4)服务发现

不需要使用额外的服务发现机制,k8s自身具备服务发现和负载均衡

(5)滚动更新

可根据应用的变化,对应用容器运行的应用,进行一次性或批量的更新

(6)版本回退

可根据应用部署情况,对应用容器运行的应用,进行历史版本回退

(7)密钥和配置管理

在不需要重新构建镜像的情况下,可以部署、更新密钥和应用配置,类似热部署

(8)存储编排

自动实现存储系统挂载及应用,特别对有状态应用应用实现数据持久化特别重要

存储系统可以是本地目录,网络存储、公共云存储服务等。

 

四、快速安装

一、准备

1、禁用SELINUX,目的是为了让容器可以读取主机文件系统,重启生效

vim /etc/selinux/config
将 
SELINUX=enforcing
改成
SELINUX=disabled

  

注:所有机器都要改动

2、关闭swap分区

kubernetes集群部署必须关闭swap分区,否则会报错,重启生效(为了搞这个,我的虚拟机搞崩两台)

vim /etc/fstab

  

注释掉带有swap的那一行

 

使用free -m查看是否已关闭,都是0表示已关闭

 

注:所有机器都要改动

3、添加网桥过滤

(1)添加网桥过滤及地址转发

vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-ng-call-ip6tables = 1
net.bridge.bridge-ng-call-iptables = 1
net.ipv4.ip_forword = 1

  

(2)使用下列命令加载br_netfilter模块

modprobe br_netfilter

  

(3)使用下列命令查看是否已加载

lsmod | grep br_netfilte
 

(4)使用下列命令加载网桥过滤文件

sysctl -p /etc/sysctl.d/k8s.conf

  

注:所有机器都要改动

4、开启IPVS

(1)安装ipset、ipvsadm

yum -y install ipset ipvsadm

  

(2)添加需要加载的模块

vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

  

(3)运行上述脚本

sh /etc/sysconfig/modules/ipvs.modules

  

查看是否已加载:

lsmod | grep ip_vs

  

注:所有机器都要改动

5、安装docker

-->docker安装

安装之后,需要更改docker配置文件

vim /etc/docker/daemon.json
#添加下面这行配置
{  "exec-opts":["native.cgroupdriver=systemd"]}

  

注:所有机器都要改动

二、安装k8s集群

1、需安装组件

 

kubeadm:初始化集群、管理集群等
kubelet:用于接收api-server指令,对pod生命周期进行管理
kubectl:集群命令行管理工具


2、设置阿里云yum源

vim /etc/yum.repos.d/k8s.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

  

 

查看kubeadm最新版本

yum list | grep kubeadm

  

注:所有机器都要改动

3、安装组件

此处安装版本为1.16.0,按需改动版本

yum -y install kubeadm-1.16.0-0  kubelet-1.16.0-0 kubectl-1.16.0-0

  

注:所有机器都要安装

4、配置kubelet

vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

  

配置开机自启动:

systemctl enable kubelet

  

注:所有机器都要改动

5、查看需要下载的镜像

Master机器上需要的镜像可以用下列命令查看:

kubeadm config images list

  

 

可以使用如下脚本下载:

#!/bin/bash
img_list='
gotok8s/kube-apiserver:v1.16.0
gotok8s/kube-controller-manager:v1.16.0
gotok8s/kube-scheduler:v1.16.0
gotok8s/kube-proxy:v1.16.0
gotok8s/pause:3.1
gotok8s/etcd:3.3.15-0
gotok8s/coredns:1.6.2
'

#拉取镜像 
for img in ${img_list}
do
       docker pull $img
done

#使用docker tag重新打标
for img in ${img_list}
do
       docker tag $img k8s.gcr.io${img:7}
done

#删除不需要的镜像
for img in ${img_list}
do
        docker rmi $img
done

  

 

因为k8s.gcr.io仓库需要才能下载,所以使用gotok8s仓库,然后在进行重新打标

Worker节点上的需要如下镜像

k8s.gcr.io/kube-proxy:v1.16.0
k8s.gcr.io/pause:3.1

  

可以使用Docker镜像导入导出命令:

#导出
docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy:v1.16.0 
#导入
docker load -i kube-proxy.tar

  

6、集群初始化

在master节点上使用如下命令,包括指定kubernetes版本以及当前主机ip

kubeadm init --kubernetes-version=v1.16.0  --apiserver-advertise-address=192.168.197.100

  

会进行集群初始化以及各种证书的创建操作等。

出现如下内容说明初始化成功,里面包含接下来需要的操作,包括配置文件拷贝以及节点加入集群。

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.197.100:6443 --token cmx34b.juizw6tp9ptlgg9i \
    --discovery-token-ca-cert-hash sha256:77661093886eb76ffa7595e200a4ce2a5b20f02c164f4946956dff16d941a1e7

  

(1)根目录下创建".kube"文件夹

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

  

(2)使用如下命令安装网络插件weave

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

  

(3)将worker节点加入集群中

在workder节点上执行如下命令

kubeadm join 192.168.197.100:6443 --token cmx34b.juizw6tp9ptlgg9i \
    --discovery-token-ca-cert-hash sha256:77661093886eb76ffa7595e200a4ce2a5b20f02c164f4946956dff16d941a1e7

  

7、验证集群是否可用

#获取集群节点
kubectl get nodes

  

 

#查看集群健康状况
kubectl cluster-info

  

 

还有一种安装方式:二进制文件安装k8s集群,比较麻烦,有空看一下怎么搞。

===============================

我是Liusy,一个喜欢健身的程序员。

欢迎关注微信公众号【Liusy01】,一起交流Java技术及健身,获取更多干货,领取Java进阶干货、最新面试宝典,一起成为Java大神。

来都来了,关注一波再溜呗。

posted @ 2020-12-06 22:56  上古伪神  阅读(427)  评论(0编辑  收藏  举报