1 Kubernetes简介
- 在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Brog系统运行管理着成千上万的容器应用;
- kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
- Kubernetes项目源于Brog,可以说是集结了Brog设计精华,并且吸收了Brog系统中的经验和教训;
- Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交付给用户;
-
Kubernetes的优点:
- 隐藏资源管理和错误处理,用户仅需要关注应用的开发;
- 服务高可用、高可靠;
- 可将负载运行在由成千上万的机器联合而成的集群中。
2 Kubernetes设计架构
Kubernetes集群包含有代理节点kubele和Master组件(APIs,scheduler,etc),一切都基于分布式的存储系统
3 安装部署Kubernetes
实验环境:
虚拟机 | 作用 |
---|---|
docker01 (192.168.43.100) | k8s集群的master节点 |
docker02 (192.168.43.101) | k8s集群的work节点1 |
docker03 (192.168.43.102) | k8s集群的work节点2 |
步骤一:配置好docker01、docker02、docker03三台虚拟机的yum源,安装并开启docker,编辑好本地解析
(这里我们就以其中的docker01的配置为例)
步骤一:禁用 swap 分区(在三台虚拟机上都做)
swapoff -a
vim /etc/fstab
注释掉下面这一行内容
# /dev/mapper/rhel-swap swap swap defaults 0 0
步骤二:获取Kubernetes的镜像和相关软件包,编辑好仓库文件(在三台虚拟机上都做)
像之前安装docker一样,这些资源我们可以在阿里云镜像站中去搜索
将编辑好的仓库文件发送给其他两台虚拟机
步骤三:安装kubelet、kubeadm、kubectl 并且开启kubelet(在三台虚拟机上都做)
yum install kubelet kubeadm kubectl -y
systemctl start kubelet.service
systemctl enable kubelet.service
步骤四:设置火墙规则(在三台虚拟机上都做)
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl --system #查看配置是否被加载
步骤五:修改Docker cgroup driver为systemd(在三台虚拟机上都做)
docker info
cd /etc/docker
vim daemon.json
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts":{
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
systemcl daemon-reload
systemctl restart docker
docker info #查看一下是否修改为systemd
步骤六:拉取安装k8s的相关镜像
kubeadm config print init-defaults #查看安装k8s的相关信息
kubeadm config images list #查询一下需要的镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google containers #由于无法翻墙,所以我们制定仓库为阿里云镜像站,查看一下需要下载的镜像是否阿里云镜像站中都含有
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers #从阿里云镜像站拉取镜像
修改镜像名称,然后将镜像上传到本地仓库(这样方便节点上其他虚拟机拉取镜像)
docker images | grep registry.aliyuncs.com | awk '{print $1":"$2}' | awk -F / '{print $3}'
for i in `docker images | grep registry.aliyuncs.com | awk '{print $1":"$2}' | awk -F / '{print $3}'`;do docker tag registry.aliyuncs.com/google_containers/$i reg.westos.org:5000/$i; done
docker images | grep reg.westos.org
docker images | grep reg.westos.org | awk '{print $1":"$2}'
for i in `docker images | grep reg.westos.org | awk '{print $1":"$2}'`; do docker push $i; done
步骤七:在docker01(master节点)上面初始化集群
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org:5000
注意:–pod-network-cidr=10.244.0.0/16 是 k8s 的网络插件所需要用到的配置信息,用来给 node 分配子网段。然后我们这边用到的网络插件是 flannel,所以需要这么来配置;后面是镜像仓库,因为我们已经把镜像上传到了本地仓库,所以要指明仓库。
步骤八:让其他节点加入集群之中
kubeadm 提示我们,其他节点需要加入集群的话,只需要执行这条命令就行了,同时里面包含了加入集群所需要的 token
在docker02和docker03上进行如下操作,让它们加入集群
kubeadm join 192.168.43.100:6443 --token c7wzlm.avp1uxbwta7snlc3 \
--discovery-token-ca-cert-hash sha256:eff17146179dac74f7f03768ace0dcbebb8384358ba6dd5459724901abbe4d60
步骤九:创建一个普通用户,按照刚刚安装成功的提示,创建目录以及相关文件,查看节点信息
useradd kubeadm
su - kubeadm
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes #查看节点的信息
步骤十:配置命令补齐功能,安装flannel网络组件
echo "source <(kubectl completion bash)" >> ~/.bashrc
source .bashrc
kubectl get pod -n kube-system
kubectl get pod -n kube-system -o wide
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml #安装flannel网络组件
安装完flannel组件后:
注意:这里所有的Pod的状态必须为Running才算完成配置,否则会在后面创建应用时出现问题。