kubernetes 安装实践
2017-08-19 本文已影响121人
一个全栈的小白
初次接触kubernetes,以此来记录集群部署的过程!!!
一、配置环境
- 节点清单
主机名 | IP | 安装组件 | 说明 |
---|---|---|---|
k8s-master | 192.168.1.5 | kubelet ,kubectl,kubeadm | master节点 |
k8s-node1 | 192.168.1.6 | node节点 |
-
版本信息
- Linux 版本 : CentOS Linux release 7.3.1611 (Core)
$ cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core)
- docker 版本:1.12.6
$ docker version Client: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64 Go version: go1.7.4 Git commit: 88a4867/1.12.6 Built: Mon Jul 3 16:02:02 2017 OS/Arch: linux/amd64 Server: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64 Go version: go1.7.4 Git commit: 88a4867/1.12.6 Built: Mon Jul 3 16:02:02 2017 OS/Arch: linux/amd64
- kubeadm版本:v1.7.3
$ kubeadm version kubeadm version: &version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.3", GitCommit:"2c2fe6e8278a5db2d15a013987b53968c743f2a1", GitTreeState:"clean", BuildDate:"2017-08-03T06:43:48Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
- kubelet版本:v1.7.3
$ kubelet --version Kubernetes v1.7.3
- gcr.io镜像
gcr.io/google_containers/kube-apiserver-amd64 v1.7.3 gcr.io/google_containers/kube-controller-manager-amd64 v1.7.3 gcr.io/google_containers/kube-scheduler-amd64 v1.7.3 gcr.io/google_containers/kube-proxy-amd64 v1.7.3 quay.io/coreos/flannel v0.8.0-amd64 gcr.io/google_containers/etcd-amd64 3.0.17 gcr.io/google_containers/pause-amd64 3.0 gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.4 gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.4 gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.4
-
系统设置
- 关闭所有节点防火墙
systemctl stop firewalld systemctl disable firewalld
- 关闭所有节点SELinux
$ /usr/sbin/sestatus -v $ vi /etc/selinux/config SELINUX=disabled
- 所有节点上设置iptables参数
$ vi /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 $ sysctl -p /etc/sysctl.d/k8s.conf
- 修改hostname
$ vi /etc/hosts 127.0.0.1 localhost k8s-master localhost4 localhost4.localdomain4 ::1 localhost k8s-master localhost6 localhost6.localdomain6 $ vi /etc/hostname k8s-master
- 重启主机
$ reboot
-
常见问题处理
修改 Linux 内核文件 sysctl -P 报错
$ sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables:没有那个文件或目录 modprobe bridge lsmod|grep bridge
二、安装组件
- 安装docker
- yum 安装
$ yum intsall -y docker
- 启动服务
$ systemctl enable docker.service $ systemctl start docker
- 安装kubernetes
- 配置yum源
$ cat >> /etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 EOF
- yum 安装
$ yum install -y kubelet kubeadm kubectl
- 配置kubectl
![](https://img.haomeiwen.com/i7324195/65dd3bbd000d7d80.jpg)
$ kubectl cluster-info
- 启动kubelet
$ systemctl enable kubelet.service
- 拉取镜像
由于从国外拉取镜像比较坑,从阿里云获取kubernetes 所需的镜像
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
KUBE_VERSION=v1.7.3
KUBE_PAUSE_VERSION=3.0
ETCD_VERSION=3.0.17
DNS_VERSION=1.14.4
FINANNEL_VERSION=v0.8.0-amd64
GCR_URL=gcr.io/google_containers
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/kubernetes_kubeadm
images=(kube-proxy-amd64:${KUBE_VERSION}
kube-scheduler-amd64:${KUBE_VERSION}
kube-controller-manager-amd64:${KUBE_VERSION}
kube-apiserver-amd64:${KUBE_VERSION}
pause-amd64:${KUBE_PAUSE_VERSION}
etcd-amd64:${ETCD_VERSION}
k8s-dns-sidecar-amd64:${DNS_VERSION}
k8s-dns-kube-dns-amd64:${DNS_VERSION}
k8s-dns-dnsmasq-nanny-amd64:${DNS_VERSION}
kube-flannel:${FINANNEL_VERSION})
for imageName in ${images[@]} ; do
docker pull $ALIYUN_URL/$imageName
docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
do
三、kubernetes集群部署
- 初始化kubeadm
- 在初始化时要加上 kubernetes-version
$ kubeadm init \ --kubernetes-version=v1.7.3 \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.61.91
- 配置kubectl访问集群
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 cs NAME STATUS MESSAGE ERROR scheduler Healthy ok controller-manager Healthy ok etcd-0 Healthy {"health": "true"}
- 安装Pod Network
- flannel network add-on
mkdir -p ~/k8s/ $ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml $ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml $ kubectl create -f kube-flannel-rbac.yml clusterrole "flannel" created clusterrolebinding "flannel" created $ kubectl apply -f kube-flannel.yml serviceaccount "flannel" created configmap "kube-flannel-cfg" created daemonset "kube-flannel-ds" created
- 使用kubectl get pod --all-namespaces -o wide确保所有的Pod都处于Running状态。
kubectl get pod --all-namespaces -o wide