专栏首页Liusy01初识Kubernetes及快速安装

初识Kubernetes及快速安装

之前几篇介绍了Docker是什么以及怎么使用,但Docker只是容器管理工具,如果想要在Docker上部署大型应用,首先就是要解决网络的问题,还有一系列复杂的问题,包括集群管理,负载均衡等。此时就需要容器编排部署工具来解决这些问题。

1

容器编排部署工具

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

容器编排部署工具有:

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

(2)mesos+marathon

(3)kubernetes

2

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的透明代理及负载均衡、运行容器。

3

k8s主要功能介绍

(1)自动装箱

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

(2)自我修复

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

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

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

(3)水平扩展

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

(4)服务发现

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

(5)滚动更新

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

(6)版本回退

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

(7)密钥和配置管理

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

(8)存储编排

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

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

4

快速安装

一、准备

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

kubectl

初始化集群、管理集群等

用于接收api-server指令,对pod生命周期进行管理

集群命令行管理工具

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

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集群,比较麻烦,有空看一下怎么搞。

本文分享自微信公众号 - Liusy01(Liusy_01),作者:Liusy01

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • k8s之HTTP请求负载分发

    对于基于HTTP的服务来说,不同的URL地址经常对应不同的后端服务或者虚拟服务器,通常的做法是在应用前添加一个反向代理服务器Nginx,进行请求...

    Liusy
  • k8s全系列文章汇总

    k8s的文章一共写了十八篇,是一个比较全面的学习日志。从八月二十九开始发的第一篇文章,到现在十二月份了,从看《Kubernetes权威指南 第4...

    Liusy
  • k8s之DNS服务器搭建

    在使用k8s部署springboot+redis简单应用这篇文章中,spring boot连接redis是直接使用的IP连接,那么可不可以直接使用服务名称进行连...

    Liusy
  • 工商银行MySQL数据库架构解密

    大型国有银行,整体核心的系统都是大机+DB2这样的传统架构;针对现在的互联网金融业务快速扩张的需求,传统的架构面临着比较大的挑战,主要集中在四个方面:

    IT大咖说
  • Neurology:中老年自闭症谱系障碍患者的局部脑回指数减少

    自闭症是发展性障碍,会严重影响患者的社会交往、行为和执行功能。以往研究发现学龄期儿童自闭症患者会表现出局部脑区脑回指数(LGI,脑回指数是用来衡量皮层皱褶程度的...

    用户1279583
  • 专家提醒用户警惕变身蠕虫的《变形金刚4》

    上周五,《变形金刚4:绝迹重生》在国内和北美同步上映。虽然此片在北美恶评如潮,但仍然阻止不了中国影迷的观影狂潮,创下了首周三天狂卷6亿票房的新...

    安恒信息
  • 智能运维:AIOps与DevOps落地、数据库选型与SQL优化策略都在这了!

    这将会是一次为广大技术同仁量身定制的技术探索与交流,本次Gdevops北京站从往届峰会收集而来的数千份调查问卷中汲取出大多数参会者的意见,并以此作为主题设置、议...

    养码场
  • Gradle多项目构建与jar包发布

    通常在使用Maven构建项目的时候,我们会将一个项目划分为多个模块,然后通过父工程去管理子模块。而 Gradle 也拥有类似的功能,我们将其称之为多项目构建(m...

    端碗吹水
  • JWT注入

    通过这道题再次学习到JWT的一种考法。首先题目打开是一个登录框,默认弱口令admin/admin登陆成功,页面返回了一个key值

    字节脉搏实验室
  • 霍学文:互联网金融的未来形态

    大数据文摘

扫码关注云+社区

领取腾讯云代金券