“ 今天认识下主角Kubernetes吧,真的是一个神奇的家伙!”
神奇的家伙
01.初识Kubernetes
Kubernetes是Google与RedHat共同主导的开源项目。它主要解决的问题是,编排,调度,容器云,集群管理,同时在不同的发展阶段,Kubernetes需要着重解决的问题是不同的。不过对于大多数的人来说,我们希望Kubernetes项目带来的体验是:现在我有了应用的容器镜像,请帮我在一个给定的集群上把这个应用运行起来。进一步的,它还需要给我提供路由网管、水平扩展、监控、备份、容灾恢复等运维功能。
控制节点,即Master节点。由三个独立组件组合而成,负责API服务的kube-apiserver、负责调度的kube-scheduler和负责容器编排的kube-controller-manager。整个集群的持久化数据是由kube-apiserver处理之后保存在etcd中。
计算节点,最核心的部分是kubelet组件,主要负责同容器运行时打交道。Kubelet还会与Device Plugin插件交互,该插件是用来管理GPU等宿主机物理设备的主要组件。Kubelet还会调用网络插件和存储插件为容器配置和网络和持久化存储。
02.组件关系
二话不说,先来张经典图镇楼
· Pod
· Container(容器)
· Label(标签)
· Replication Controller(复制控制器)
· Service(服务)
· Node(节点)
· Kubernetes Master(Kubernetes主节点)
Pod,是一组功能相关的Container的封装,共享存储和Network Namespace,是K8S调度和作用运行的基本单位(Scheduler调度,Kubelet运行),容易“走失”,需要Workload和Service的“呵护”。
Workload (Deployment, StatefulSet, DaemonSet, Job…),是一组相关的Pod的封装。
Service,Pod“防失联”,给一组Pod设置反向代理。
01.安装kubeadm
配置yum源
首先配置Kubernetes和docker的yum源(这里使用阿里云的镜像服务器)
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enable=1
cd /etc/yum.repos.d/
wgethttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum repolist
安装kubeadm和docker
yum install docker-cekubelet-1.11.1 kubeadm-1.11.1 kubectl-1.11.1 kubernetes-cni
启动相关服务
systemctl enable docker
systemctl enablekubelet.service
systemctl start docker
systemctl startkubelet
02.拉取其他组件
Kubernetes的其他组件镜像都是托管在Google云上的,在没有科学上网的情况下是无法直接下载的。还好有大神每天把镜像都同步到GitHub上了,https://github.com/anjia0532/gcr.io_mirror,我们可以使用下面这个小脚本来拉取。
vim pullkubeimages.sh
#!/bin/bash
images=(kube-proxy-amd64:v1.11.1kube-scheduler-amd64:v1.11.1 kube-controller-manager-amd64:v1.11.1
kube-apiserver-amd64:v1.11.1etcd-amd64:3.2.18 coredns:1.1.3 pause:3.1 )
for imageName in${images[@]} ; do
docker pullanjia0532/google-containers.$imageName
docker taganjia0532/google-containers.imageNamek8s.gcr.io/imageName k8s.gcr.io/imageNamek8s.gcr.io/imageName
docker rmianjia0532/google-containers.$imageName
done
chmod +x pullkubeimages.sh
sh pullkubeimages.sh
03.禁用swap
Kubenetes是不允许开启swap分区的,所以需要禁用掉。
禁用swap分区
swapoff -a
永久禁用
sudo vi /etc/fstab
把/dev/mapper/centos-swap swap这行注释掉
修改如下文件
vim/etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="–fail-swap-on=false"
04.定制化kubeadm(可选)
编写kubeadm.yaml,定制化Kubernetes集群配置
vim kubeadm.yaml
apiVersion:kubeadm.k8s.io/v1alpha1
kind:MasterConfiguration
controllerManagerExtraArgs:
horizontal-pod-autoscaler-use-rest-clients:“true”
horizontal-pod-autoscaler-sync-period:“10s”
node-monitor-grace-period: “10s”
apiServerExtraArgs:
runtime-config: “api/all=true”
kubernetesVersion:“v1.11.1”
04.开始部署
执行如下命令
kubeadm init --config kubeadm.yaml
如果一切顺利,只需要几分钟就可以完成Master的部署,最后会输出如下:
You can now join any number of machines by running thefollowing on each node
as root:
kubeadm join 10.150.1.185:6443–token gb731y.6pczaxc6gghcujsm --discovery-token-ca-cert-hashsha256:6cf05e40a2fde4a36c4d5a65e3e266b105b0671c66656b54838817deed491fb0
是用于Worker节点接入Master时使用。
认证配置
Kubeadm还会提示如下操作:
To start using your cluster, you need to run thefollowing as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf$HOME/.kube/config
sudo chown (id−u):(id -u):(id−u):(id -g)$HOME/.kube/config
Kubenertes集群默认需要加密方式访问,所以这几条命令就是将刚刚部署生成的Kubernetes集群的安全配置文件,保存到当前用户的.kube目录下,kubectl默认会使用这个目录下的授权文件访问Kubernetes集群。
部署网络插件
一键部署
kubectl apply -f https://git.io/weave-kube-1.6
查看状态
kubectl get pods -n kube-system
[root@localhost ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-78fcdf6894-csxpw 1/1 Running 0 27m
coredns-78fcdf6894-td848 1/1 Running 0 27m
etcd-localhost.localdomain 1/1 Running 0 26m
kube-apiserver-localhost.localdomain 1/1 Running 0 26m
kube-controller-manager-localhost.localdomain 1/1 Running 0 26m
kube-proxy-v78j8 1/1 Running 0 27m
kube-scheduler-localhost.localdomain 1/1 Running 0 26m
weave-net-vcnb6 2/2 Running 0 44s
现在都是running状态,说明到目前位置部署正常。
部署Worker节点
第一步,在worker节点安装docker和kubeadm等,同“安装kubeadm“一节。
第二步,执行刚刚生成的命令
kubeadmjoin 10.150.1.185:6443 --token gb731y.6pczaxc6gghcujsm–discovery-token-ca-cert-hash sha256:6cf05e40a2fde4a36c4d5a65e3e266b105b0671c66656b54838817deed491fb0
调整Taint污点
默认情况下,Master节点时不允许运行用户Pod的,现在我们修改配置,去掉污点,让Mastered也加入调度