写在前面

    因为我的节点都在国内,所以k8s的镜像无法在公网上顺利下载,而是下载的别人阿里云上的镜像,坐着不能保证镜像的安全性和官方性。

环境介绍

    Docker版本

[root@k8s ~]# docker version
Client:
 Version:       18.03.0-ce
 API version:   1.37
 Go version:    go1.9.4
 Git commit:    0520e24
 Built: Wed Mar 21 23:09:15 2018
 OS/Arch:       linux/amd64
 Experimental:  false
 Orchestrator:  swarm

Server:
 Engine:
  Version:      18.03.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.4
  Git commit:   0520e24
  Built:        Wed Mar 21 23:13:03 2018
  OS/Arch:      linux/amd64
  Experimental: false

    kubectl版本

[root@k8s ~]# kubectl  version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:55:54Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:44:10Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

    kubernetes版本

v1.10.0

安装过程

    修改主机名并配置两台主机间的hosts通讯,这里不在阐述

hostnamectl set-hostname k8s
hostnamectl set-hostname k8s1

    停止防火墙并禁止开机启动

systemctl stop firewalld && systemctl disable firewalld

    关闭selinux防火墙并设置开机关闭

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux

    关闭swap分区,并设置开机不自动挂载

swapoff -a
[root@k8s ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Sat Jun  1 16:28:24 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=e60e4d97-753a-4db1-a590-54ba91cd48db /boot                   xfs     defaults        0 0
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

    修改iptables转发规则

vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

    使配置生效

modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

    安装docker依赖工具

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

    添加docker repo文件

sudo yum-config-manager \
  --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo

    查看可以安装版本(可选)

yum list docker-ce --showduplicates | sort -r

    安装Docker

sudo yum install docker-ce-18.03.0.ce-1.el7.centos

    启动docker并设置开机启动

systemctl start docker && systemctl enable docker



以上步骤都要在master和node节点上运行


    镜像下载

在master上执行下面命令,你也可以在写到一个shell脚本里面,直接运行shell脚本,因为下载镜像很容易搞晕。

docker pull cnych/kube-apiserver-amd64:v1.10.0
docker pull cnych/kube-scheduler-amd64:v1.10.0
docker pull cnych/kube-controller-manager-amd64:v1.10.0
docker pull cnych/kube-proxy-amd64:v1.10.0
docker pull cnych/k8s-dns-kube-dns-amd64:1.14.8
docker pull cnych/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker pull cnych/k8s-dns-sidecar-amd64:1.14.8
docker pull cnych/etcd-amd64:3.1.12
docker pull cnych/flannel:v0.10.0-amd64
docker pull cnych/pause-amd64:3.1

docker tag cnych/kube-apiserver-amd64:v1.10.0 k8s.gcr.io/kube-apiserver-amd64:v1.10.0
docker tag cnych/kube-scheduler-amd64:v1.10.0 k8s.gcr.io/kube-scheduler-amd64:v1.10.0
docker tag cnych/kube-controller-manager-amd64:v1.10.0 k8s.gcr.io/kube-controller-manager-amd64:v1.10.0
docker tag cnych/kube-proxy-amd64:v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0
docker tag cnych/k8s-dns-kube-dns-amd64:1.14.8 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8
docker tag cnych/k8s-dns-dnsmasq-nanny-amd64:1.14.8 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker tag cnych/k8s-dns-sidecar-amd64:1.14.8 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8
docker tag cnych/etcd-amd64:3.1.12 k8s.gcr.io/etcd-amd64:3.1.12
docker tag cnych/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
docker tag cnych/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1

docker rmi cnych/kube-apiserver-amd64:v1.10.0
docker rmi cnych/kube-scheduler-amd64:v1.10.0
docker rmi cnych/kube-controller-manager-amd64:v1.10.0
docker rmi cnych/kube-proxy-amd64:v1.10.0
docker rmi cnych/k8s-dns-kube-dns-amd64:1.14.8
docker rmi cnych/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker rmi cnych/k8s-dns-sidecar-amd64:1.14.8
docker rmi cnych/etcd-amd64:3.1.12
docker rmi cnych/flannel:v0.10.0-amd64
docker rmi cnych/pause-amd64:3.1

在node节点上执行下面命令,同理你也可以写到一个脚本里面

docker pull cnych/kube-proxy-amd64:v1.10.0
docker pull cnych/flannel:v0.10.0-amd64
docker pull cnych/pause-amd64:3.1
docker pull cnych/kubernetes-dashboard-amd64:v1.8.3
docker pull cnych/heapster-influxdb-amd64:v1.3.3
docker pull cnych/heapster-grafana-amd64:v4.4.3
docker pull cnych/heapster-amd64:v1.4.2
docker pull cnych/k8s-dns-kube-dns-amd64:1.14.8
docker pull cnych/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker pull cnych/k8s-dns-sidecar-amd64:1.14.8

docker tag cnych/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
docker tag cnych/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1
docker tag cnych/kube-proxy-amd64:v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0
docker tag cnych/k8s-dns-kube-dns-amd64:1.14.8 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8
docker tag cnych/k8s-dns-dnsmasq-nanny-amd64:1.14.8 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker tag cnych/k8s-dns-sidecar-amd64:1.14.8 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8
docker tag cnych/kubernetes-dashboard-amd64:v1.8.3 k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
docker tag cnych/heapster-influxdb-amd64:v1.3.3 k8s.gcr.io/heapster-influxdb-amd64:v1.3.3
docker tag cnych/heapster-grafana-amd64:v4.4.3 k8s.gcr.io/heapster-grafana-amd64:v4.4.3
docker tag cnych/heapster-amd64:v1.4.2 k8s.gcr.io/heapster-amd64:v1.4.2


docker rmi cnych/kube-proxy-amd64:v1.10.0
docker rmi cnych/flannel:v0.10.0-amd64
docker rmi cnych/pause-amd64:3.1
docker rmi cnych/kubernetes-dashboard-amd64:v1.8.3
docker rmi cnych/heapster-influxdb-amd64:v1.3.3
docker rmi cnych/heapster-grafana-amd64:v4.4.3
docker rmi cnych/heapster-amd64:v1.4.2
docker rmi cnych/k8s-dns-kube-dns-amd64:1.14.8
docker rmi cnych/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker rmi cnych/k8s-dns-sidecar-amd64:1.14.8

    


   master和node节点都需要执行

    安装kubelet、kubeadm、kubectl、kubernetes-cni

        添加yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

        安装

yum makecache fast && yum install -y kubelet-1.10.0-0
yum install -y kubeadm-1.10.0-0 kubectl-1.10.0-0 kubernetes-cni-0.6.0-0.x86_64.rpm

    查看docker驱动

docker info |grep Cgroup
    Cgroup Driver: cgroupfs

注:kubectl默认使用的驱动是cgroupfs的,但是使用yum安装的,yum给改成了system了。所以我们需要手动更改kubectl驱动。

    修改kubectl驱动

vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# 把这个文件中的
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemed"
替换成
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"

    重新加载kubectl daemon

systemctl daemon-reload


下面命令需要在master上执行

kubeadm init --kubernetes-version=v1.10.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.127

解释:

--kubernetes-version   k8s版本
--pod-network-cidr  产生的pod之间的网络段
--apiserver-advertise-address  master节点地址
特别注意:如果初始化k8s集群成功,最后会显示一行命令,如下:一定要保存住,无法复现。
  # 这条命令是其它node节点加入k8s集群的命令。
  kubeadm join 192.168.1.127:6443 --token g8lrmt.1nhjcjqsk3a7l096 --discovery-token-ca-cert-hash sha256:0227ac613398b48b0d1949941c9f138b0444270cdd84ec9ef75e708ac14ca1cf

    根据提示修改kubectl的配置

mkdir -p $HOME/.kube.
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config


在node上执行加入k8s命令

  kubeadm join 192.168.1.127:6443 --token g8lrmt.1nhjcjqsk3a7l096 --discovery-token-ca-cert-hash sha256:0227ac613398b48b0d1949941c9f138b0444270cdd84ec9ef75e708ac14ca1cf

在master上查看集群状态

# 此时输出的node节点可能显示为notread状态,没关系我们把pod通讯的网络插件安装上就行了。
kubectl get node

    master安装flannel插件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f  kube-flannel.yml

    查看pod的启动状态

kubectl get pods --all-namespaces
[root@k8s ~]#  kubectl get pods --all-namespaces
	NAMESPACE     NAME                          READY     STATUS    RESTARTS   AGE
	kube-system   etcd-k8s                      1/1       Running   0          4m
	kube-system   kube-apiserver-k8s            1/1       Running   0          4m
	kube-system   kube-controller-manager-k8s   1/1       Running   0          4m
	kube-system   kube-dns-86f4d74b45-nj7p8     3/3       Running   0          5m
	kube-system   kube-flannel-ds-amd64-7tpmz   1/1       Running   0          2m
	kube-system   kube-proxy-r6bgh              1/1       Running   0          5m
	kube-system   kube-scheduler-k8s            1/1       Running   0          4m

至此k8s集群安装完毕!!!!






安装dashboard UI管理工具

    下载yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

安装过程见:https://www.cnblogs.com/harlanzhang/p/10045975.html