kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
1、传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
2、新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。
3、容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。
一、实验环境部署操作步骤:
1、在真机上面搭建共享yum源,含有docker的安装包
2、在server1上配置本地yum源,server2、server3是一样的
[root@server1 ~]# cat /etc/yum.repos.d/docker-ce.repo
[docker]
name=docker-ce
baseurl=http://172.25.1.250/docker
gpgcheck=0
[root@server1 yum.repos.d]# yum repolist #查看配置成功
3、查看各个节点的解析
vim /etc/hosts
4、在server1、server2、server3上面安装docker服务,并且开启
yum install docker-ce -y
[root@server1 yum.repos.d]# systemctl start docker
[root@server1 yum.repos.d]# systemctl enable docker
[root@server1 yum.repos.d]# systemctl status docker
二、部署一个基本的k8s集群
1、禁用 swap 分区:(三台主机)
注释掉/etc/fstab 文件中的 swap 定义
server124:
[root@server1 yum.repos.d]# swapoff -a
[root@server1 yum.repos.d]# vim /etc/fstab
2、下载rpm安装包(三台主机)
下载地址:
https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64/repodata/primary.xml https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.3e221b11fbjEYj
server124
vim /etc/yum.repos.d/kubernetes.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
yum clean all
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
3、修改 sysctl 配置*(三台主机均设置)
对于 RHEL/CentOS 7 系统,可以会由于 iptables 被绕过导致网络请求被错误的路由。所以还需执行如下命令保证 sysctl 配置中 net.bridge.bridge-nf-call-iptables 被设为1。
[root@server1 ~]# vim /etc/sysctl.d/k8s.conf
[root@server1 ~]# cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
三、Master 节点的安装配置
1、在server1(master节点)上面初始化集群
注意:–pod-network-cidr=10.244.0.0/16 是 k8s 的网络插件所需要用到的配置信息,用来给 node 分配子网段。然后我们这边用到的网络插件是 flannel,就是这么配。
kubeadm init --pod-network-cidr=10.244.0.0/16
初始化的时候 kubeadm 会做一系列的校验,以检测你的服务器是否符合 kubernetes 的安装条件,检测结果分为 [WARNING] 和 [ERROR] 两种。其中 [ERROR] 部分要予以解决。
错误:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.4.3-0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
等等
我们可以通过国内厂商提供的 kubernetes 的镜像服务来下载,比如第一个 k8s.gcr.io/kube-apiserver:v1.14.1 镜像,可以执行如下命令从阿里云下载:
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.1
镜像下载下来以后再通过 docker tag 命令将其改成kudeadm安装时候需要的镜像名称。
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.1 k8s.gcr.io/kube-apiserver:v1.18.1
其它缺失的镜像也依照上面步骤进行操作
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.1 k8s.gcr.io/kube-controller-manager:v1.18.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.1 k8s.gcr.io/kube-scheduler:v1.18.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.1 k8s.gcr.io/kube-proxy:v1.18.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
2、镜像全部下载完毕后,再执行最开始的 init 命令后 kubeadm 就能成功安装了。最后一行,kubeadm 会提示我们,其他节点需要加入集群的话,只需要执行这条命令就行了,同时里面包含了加入集群所需要的 token(这个要记下来)。
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 172.25.1.1:6443 --token 0pojwp.9qc7ohcng7h6c13y \
--discovery-token-ca-cert-hash sha256:5fa833ee8861cc3ddd7d6d960287a1fa313be78b0a1c4fd71d3e4000bc4504bf
四、配置 kubectl
kubectl 是管理 Kubernetes 集群的命令行工具,前面我们已经在所有的节点安装了 kubectl。Master 初始化安装完后需要做一些配置工作,然后 kubectl 就能使用了
1、具体操作就依照前面 kubeadm init 输出的第一个红框内容。这里推荐使用使用普通用户执行 kubectl(root 会有一些问题),首先我们新建个普通用户wjjk8s.
[root@server1 ~]# useradd wjjk8s
[root@server1 ~]# vim /etc/sudoers
[root@server1 ~]# su - wjjk8s
[wjjk8s@server1 ~]$ mkdir -p $HOME/.kube
[wjjk8s@server1 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[wjjk8s@server1 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
2、为了使用更加便捷,启用 kubectl 命令的自动补全功能。
echo "source <(kubectl completion bash)" >> ~/.bashrc
3、安装 Pod 网络
要让 Kubernetes 集群能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信。(即前面 kubeadm init 输出的第二个红框内容)
[wjjk8s@server1 ~]$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4、开放端口(已关闭防火墙)
五、Node 节点的安装配置-将server2加入k8s集群
1,添加节点
(1)在两个 node 节点上分别执行如下命令(即前面 kubeadm init 输出的最后一个红框内容),将其注册到 Cluster 中:
server2:
kubeadm join --token 0pojwp.9qc7ohcng7h6c13y 172.25.1.1:6443 --discovery-token-ca-cert-hash sha256:5fa833ee8861cc3ddd7d6d960287a1fa313be78b0a1c4fd71d3e4000bc4504bf
kubectl get cs
2、安装镜像
在每一个 node 节点上我们还需要下载 quay.io/coreos/flannel:v0.11.0-amd64、k8s.gcr.io/pause 和 k8s.gcr.io/kube-proxy 这三个镜像,其中后面两个镜像具体版本可以执行kubeadm config images list 查看一下:
server24:
[root@server2 ~]# docker pull quay.io/coreos/flannel:v0.11.0-amd64
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.1 k8s.gcr.io/kube-proxy:v1.18.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
六、查看节点状态
(1)在 master 节点上执行 kubectl get nodes 查看节点状态:
[wjjk8s@server1 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
server1 Ready master 26m v1.18.1
server2 Ready <none> 11m v1.18.1
server4 Ready <none> 7m4s v1.18.1
至此 Kubernetes集群创建成功。