部署规划图:

安装方式
部署工具
可使用批量部署工具(ansible或者saltstack),手动二进制,apt-get/yum等方式安装,以守护进程的方式启动在宿主机上,类似于是nginx一样使用service脚本启动。
kubeadm
使用k8s官方提供的部署工具 kubeadm 自动安装, 需要在 master 和 node 节点上安装 docker 等组件,然后初始化,把管理端的控制服务和node上的服务都以pod的方式运行。
kubeadm介绍
https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm/
V1.10版本 kubeadm 介绍:
https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.10.md
安装注意事项:
注意:禁用 swap selinux iptables
安装步骤
具体步骤
- master 和 node 先 安装 kubelet docker kubeadm
- master 节点 运行 kubeadm init 初始化命令
- 验证 master
- N ode 节点使用 kubeadm 加入 k8s master
- 验证 node
- 启动 容器 测试访问
配置阿里云仓库地址
配置阿里云镜像的kubernetes源 用于安装kubelet kubeadm kubectl命令。
# apt-get update && apt-get install -y apt-transport-https
# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# apt-get update
安装指定版本kubeadm:
# apt-get install -y kubelet kubeadm kubectl
# systemctl enable kubelet
#安装指定版本kubeadm
# apt-cache madison kubeadm #查看版本信息
# apt-get install kubeadm=1.14.1-00 kubelet=1.14.1-00 kubectl=1.14.1-00
验证 kubelet 开机自启动:
目前启动kbelet 以下报错:
Jul 9 20:09:33 docker1 systemd[1]: Stopped kubelet: The Kubernetes Node Agent.
Jul 9 20:09:33 docker1 systemd[1]: Started kubelet: The Kubernetes Node Agent.
Jul 9 20:09:33 docker1 kubelet[111057]: F0709 20:09:33.579479 111057 server.go:193] failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory
Jul 9 20:09:33 docker1 systemd[1]: kubelet.service: Main process exited, code=exited, status=255/n/a
Jul 9 20:09:33 docker1 systemd[1]: kubelet.service: Failed with result 'exit-code'.
kubeadm 命令使用:
命令使用:
https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm/
集群初始化:
https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/
验证版本:
kubeadm version

查看安装指定版本k8s,需要的镜像有哪些
[Tue Jul 09 20:14
root@docker1 ~]#kubeadm config images list --kubernetes-version v1.14.1
k8s.gcr.io/kube-apiserver:v1.14.1
k8s.gcr.io/kube-controller-manager:v1.14.1
k8s.gcr.io/kube-scheduler:v1.14.1
k8s.gcr.io/kube-proxy:v1.14.1
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1
镜像下载:
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1
初始化master:
# kubeadm init --apiserver-advertise-address=172.16.36.20 --apiserver-bind-port=6443 --kubernetes-version=v1.14.1 --pod-network-cidr=10.10.0.0/16 --service-cidr=10.20.0.0/16 --service-dns-domain=martinhe.local --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --ignore-preflight-errors=swap

执行相应操作
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
第一步执行操作如下:
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
第二步执行操作如下:
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
第三步执行操作如下:
Then you can join any number of worker nodes by running the following on each as root:
#此操作在要添加到cluster中的node上执行,即可添加
# kubeadm join 172.16.36.20:6443 --token iqpg2k.ybw29ow84qj4kqko \
--discovery-token-ca-cert-hash sha256:73fb841a753a032730c60975cb3462d9f79ed78d853253653229edf7efd8a398
在master上查看当前集群中的node状态信息:未添加node节点前:
[Tue Jul 09 20:41
root@docker1 ~]#kubectl get node
NAME STATUS ROLES AGE VERSION
docker1.martinhe.com NotReady master 7m32s v1.14.1
分别在两台节点上执行如下命令,添加节点到集群
# kubeadm join 172.16.36.20:6443 --token ny6d9d.uoaxc1ma5s8f9llm \
--discovery-token-ca-cert-hash sha256:83975fc9b5a250e1309b0258dbae3ce5351dd8ef6f943cfd14dadde9a1f855df
在master上查看当前集群中的node状态信息:添加node节点后:

需要部署 flannel-网络驱动-仅在控制节点(master)
https://github.com/coreos/flannel/
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# docker images #可看到flannel镜像,从节点会从主节点拉取镜像
quay.io/coreos/flannel v0.11.0-amd64 ff281650a721 5 months ago 52.6MB
在master上查看当前集群中的node状态信息:添加node节点后,并部署flannel后

kubect命令自动补全功能:
#安装完毕后,重新刷新bash后生效。
yum install bash-completion
source <(kubectl completion bash)