kubernetes之master搭建.md

  • 环境: centos7, kubernetes 1.11.2, docker-ce-17.03.2.ce

Foreward

Kubernetes对于Master机器的配置最低的要求是2G内存和2 Core CPU.
使用kubeadm来安装master cluster.

Install

1个master,2个node
k8s-master-1
192.168.1.100
k8s-node-1
192.168.1.101
k8s-node-2
192.168.1.102

Prepare

端口检查

1
2
3
4
5
6
7
8
9
10
11
12
13
# Master node(s)
Protocol Direction Port Range Purpose
TCP Inbound 6443* Kubernetes API server
TCP Inbound 2379-2380 etcd server client API
TCP Inbound 10250 Kubelet API
TCP Inbound 10251 kube-scheduler
TCP Inbound 10252 kube-controller-manager
TCP Inbound 10255 Read-only Kubelet API
# Worker node(s)
Protocol Direction Port Range Purpose
TCP Inbound 10250 Kubelet API
TCP Inbound 10255 Read-only Kubelet API
TCP Inbound 30000-32767 NodePort Services**

环境调整

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 关闭SELinux(临时)
$ setenforce 0
# 永久关闭SELinux
$ vim /etc/selinux/config
SELINUX=disabled
# 关闭swap
$ swapoff -a
# 添加kubernetes的yum仓库,这里使用阿里云的.
$ vim /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

设置hosts

1
2
3
4
$ vim /etc/hosts
192.1.1.100 k8s-master-1
192.1.1.100 k8s-node-1
192.1.1.100 k8s-node-2

Install kubeadm kubectl kubelet

1
$ yum install -y kubeadm kubectl kubelet

Install Docker

kubernetes v1.11.2建议是用的docker版本是17.03版本,这里安装过程忽略.

下载k8s相关镜像

由于在使用kubeadm init时,下载的镜像从k8s.gcr.io上下载,国内网络被墙了,这边只能曲线救国.

利用docker hub做中转(因为docker hub是在国外的).

具体操作是先在github上创建相关的Docekrfile,然后再在docker hub上创建auto build仓库.最后从自己的docker hub仓库下载镜像后,重命名为k8s.gcr.io/kube-scheduler-amd64:v1.11.2等即可.

这里有个镜像拉取脚本.

(注意:v1.11版本以后,DNS服务使用coredns:1.1.3,不再使用k8s-dns相关容器,即k8s-dns-sidecar,k8s-dns-kube-dns,k8s-dns-dnsmasq)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
images=(
kube-proxy-amd64:v1.11.2
kube-scheduler-amd64:v1.11.2
kube-controller-manager-amd64:v1.11.2
kube-apiserver-amd64:v1.11.2
etcd-amd64:3.2.18
pause:3.1
kubernetes-dashboard-amd64:v1.8.3
k8s-dns-sidecar-amd64:1.14.8
k8s-dns-kube-dns-amd64:1.14.8
k8s-dns-dnsmasq-nanny-amd64:1.14.8
coredns:1.1.3
)
for imageName in ${images[@]} ; do
docker pull jilingjun1014/$imageName
docker tag jilingjun1014/$imageName k8s.gcr.io/$imageName
docker rmi jilingjun1014/$imageName
done

master初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# master初始化
$ kubeadm init --kubernetes-version=v1.11.2 --pod-network-cidr=10.244.0.0/16
Your Kubernetes master 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/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 116.62.177.233:6443 --token mfv9of.3bo96kuhwiuf2sh5 --discovery-token-ca-cert-hash sha256:d04a7670ef39c41900ca142e807e96a326d6f37300076e94ce2bda4c0934ff52
# 配置kubectl认证(官方推荐用非root用户,这里为了方便起见,使用root用户)
$ mkdir -p ~/.kube
$ cp -i /etc/kubernetes/admin.conf ~/.kube/config
# 非root用户需要配置
$ chown $(id -u):$(id -g) $HOME/.kube/config
# root用户需要配置
$ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile $ source /etc/profile

Pod网络设置(flannel网络设置)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ mkdir -p /etc/cni/net.d/
$ cat <<EOF> /etc/cni/net.d/10-flannel.conf
{
"name": "cbr0",
"type": "flannel",
"delegate": {
"isDefaultGateway": true
}
}
EOF
$ mkdir /run/flannel/
$ cat <<EOF> /run/flannel/subnet.env
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.1.0/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
EOF
# 添加网络类型
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

检查master是否创建成功

1
2
3
4
5
6
7
8
9
10
11
# ready全部为1/1表示成功
$ kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-78fcdf6894-cvrzg 1/1 Running 0 3h # 1/1表示正常
kube-system coredns-78fcdf6894-sc2zd 1/1 Running 0 3h # 1/1表示正常
kube-system etcd-k8s-master-1 1/1 Running 0 3h
kube-system kube-apiserver-k8s-master-1 1/1 Running 0 3h
kube-system kube-controller-manager-k8s-master-1 1/1 Running 0 3h
kube-system kube-flannel-ds-2dzz9 1/1 Running 0 3h # 1/1表示正常
kube-system kube-proxy-zgbcp 1/1 Running 0 3h
kube-system kube-scheduler-k8s-master-1 1/1 Running 0 3h

其他命令

1
2
3
4
5
6
7
8
# 查看所有pod信息,需要使用--all-namespaces,不然默认参数是default
$ kubectl get pod --all-namespaces
# 查看节点信息
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-1 Ready master 1d v1.11.1
k8s-node-1 Ready <none> 2h v1.11.1
k8s-node-2 Ready <none> 1d v1.11.1

参考

使用 kubeadm 搭建 kubernetes 1.10.2 集群

利用docker hub做中转拉取google的k8s镜像

深入玩转K8S之使用kubeadm安装Kubernetes v1.10以及常见问题解答

坚持原创技术分享,您的支持将鼓励我继续创作!
Fork me on GitHub