初识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配置文件
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集群,比较麻烦,有空看一下怎么搞。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用TestBed测试具有依赖关系的Angular服务
- 使用jasmine.createSpyObj测试具有依赖关系的Angular服务
- 使用setup函数替代beforeEach函数进行Angular单元测试
- 对Angular使用了HttpClient的服务进行单元测试
- Elasticsearch中什么是 tokenizer、analyzer、filter ?
- ElasticSearch Snowball token filter
- Hibernate入门篇(三)——编写第一个Hibernate例子
- RabbitMQ与Kafka选型对比
- Hibernate进阶篇(三)——transaction简介
- Elastic search N-gram tokenizer
- java.io.IOException: com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID: 110
- io.protostuff.runtime.RuntimeUnsafeFieldFactory cannot have the same number
- dubbo 调用报Null 空指针 ,可能并不是真正的空指针
- Hibernate单表操作(四)——组件属性
- Dubbo consumer消费端启动报错java.lang.RuntimeException: [source error] not available in a static method: h