构建微服务实验环境(四):Kubernetes 集群
1、Kubernetes 安装
Kubernetes 集群安装单 manager 集群,几乎是全自动的。关键是安装包、镜像在 Google 服务器上难以获取。所以,安装建议参考以下文档:
- 官方文档。必须以此为准,你才能应付瞬息万变的更新。Installing Kubernetes on Linux with kubeadm
- 博客1:1.6.x 中文安装过程,整理的不错。在国内愉快的安装 Kubernetes
- 博客2: 自己编译 rpm 安装包,使用 git,与 docker-hub 转必要镜像资源。kubeadm 搭建 kubernetes 集群
1.1 安装环境
我们将准备三台虚拟机,例如:
| hostname | ip |
|---|---|
| k8s-master1 | 192.168.56.150 |
| k8s-worker1 | 192.168.56.151 |
| k8s-worker2 | 192.168.56.152 |
* 机器第一块网卡是 NAT;ip 属于第二块网卡;
* 系统: centos 7 core 3.10+;
* 内存与CPU:IG RAM 1CPU。
1.2 目标
- 在机器上安装一个安全的Kubernetes集群,理解相关组件
- 在群集上安装pod网络,以便应用程序组件(pod)可以相互通信
- 在集群上安装一个微服务示例应用程序(袜子店)
1.3 准备环境-RPM
所有机器上安装以下软件包:
在主机上安装kubelet和kubeadm
* docker:Kubernetes 依赖的容器运行时。推荐使用 v1.12。
* kubelet:Kubernetes 最核心的组成部分。它在集群中的所有计算机上运行,管理pod和容器。
* kubectl:控制集群运行的 Cli。只需要在管理机上,但是在其他节点上也可以使用它。
* kubeadm:集群安装、管理的 Cli。
docker 安装
curl https://releases.rancher.com/install-docker/1.12.sh | sh
systemctl start docker && systemctl enable docker
systemctl status docker
RPM 包不翻墙的获取
- 博客1 提供了百度盘下载编译好的 v1.6.2 版本
- 博客2 自己编译
建议你用 git clone 发行版,kubernetes/release
由于 git 镜像的发行版没有提供分支版本,目前最新版本 v1.6.3 (源码最新版本 v1.6.4)
安装 RPM
将编译后 x86_64 目录中文件,scp 到要安装的 centos 上, 然后在 x86_64 目录下执行
setenforce 0
yum localinstall *.rpm
systemctl enable kubelet && systemctl start kubelet
- 官网
setenforce 0是为了让容器有权访问 host 文件系统 - 启动的 kubelet 这时并不正常,这不是故障,而是等待后面 Kubeadm 的配置
修改 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 如下:
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_YOUR_ARGS=--pod-infra-container-image=pmlpml/pause-amd64:3.0"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_EXTRA_ARGS $KUBELET_YOUR_ARGS
其中,
(1)添加镜像位置,从能下载的位置下载。--pod-infra-container-image 说明从 pmlpml/pause-amd64:3.0 下载镜像;
(2)删除 cgroup 配置,参考: https://github.com/kubernetes/release/issues/306
其他工作包括:
RHEL / CentOS 7上的一些用户报告了由于iptables被绕过而导致路由不正确的问题。请(3)确保 net.bridge.bridge-nf-call-iptables在sysctl配置中设置为1,例如。
**修改 /usr/lib/sysctl.d/00-system.conf,将 net.bridge.bridge-nf-call-iptables 改成 1。 之后修改当前内核状态
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
为了(4)确保让 hostname -i 返回集群用网卡地址,请在 /etc/hosts 添加主机地址,例如:
echo "192.168.56.150 k8s-master1" >> /etc/hosts
以上内容多数在官方文档 Limitations 中有说明。否则,你就会体验所谓的“坑”,坑你几个小时正常。
最后 (5)重新 reload 服务
systemctl daemon-reload
1.4 准备环境-Images
Kubernetes 集群启动需要以下镜像:
gcr.io/google_containers/kube-controller-manager-amd64:v1.6.3
gcr.io/google_containers/kube-apiserver-amd64:v1.6.3
gcr.io/google_containers/kube-scheduler-amd64:v1.6.3
gcr.io/google_containers/kube-proxy-amd64:v1.6.3
gcr.io/google_containers/etcd-amd

本文详细介绍如何从零开始搭建Kubernetes集群,包括环境准备、安装管理节点和服务节点、配置覆盖网络及部署示例应用。
最低0.47元/天 解锁文章
6790

被折叠的 条评论
为什么被折叠?



