【kubernetes 系列2】centos7.6 kubeadm安装Kubernetes 1.14.1 集群
OS version:CentOS Linux release 7.6.1810 (Core)
Docker version:19.03.0-beta3
server list:
10.18.18.16 server1.ukr 用来安装kubernetes master
10.18.18.7 server2.ukr 用作kubernetes minion (minion1)
10.18.19.8 server3.ukr
10.18.18.3 server4.ukr 用作kubbernetes minion (minion2)
1、关闭防火墙
2、关闭selinux
3、创建/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
4、kube-proxy开启ipvs的前置条件 【master和node都需要执行】
cat > /etc/sysconfig/modules/ipvs.modules <
5、安装并启动Docker【master和node都需要执行】
# 安装docker的yum源:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum makecache fast
yum install -y docker-ce
# 启动docker
systemctl start docker
# 设置自启动
systemctl enable docker
6、安装并启动kubernetes核心组件【master和node都需要执行】
# 设置源
cat < /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
# 安装kubelet kubeadm klubectl
yum makecache fast
yum install -y kubelet kubeadm kubectl
# 将kubelet设置为自启动
systemctl enable kubelet.service
到此为每台server配置好kubernetes的环境,并安装上了docker和kubernetes核心组件。但是每天server是彼此独立的单机环境,我们的目标是需要设置一个kubernetes的集群环境,所以我们需要选出一个master的节点, 将其他的服务器作为minion节点。
7、主节点初始化
7.1 安装主节点的必要组件。
如:kube-apiserver、kube-controller-manager、kube-scheduler、etcd、pause、coredns等。
kube-apiserver:master的核心控制,不论通过kubectl还是使用remote api 直接控制,都要经过apiserver;
kube-controller-manager:对replication controller, endpoints controller, namespace controller, and serviceaccounts controller的循环控制,与kube-apiserver交互,保证这些controller工作;
kube-scheduler:Kubernetes scheduler的作用就是根据特定的调度算法将pod调度到指定的工作节点(minion)上;
etcd:用于存储集群的网络;
coredns:用于容器内部的域名;
pause:在pod中担任Linux命名空间共享的基础;
MY_REGISTRY=registry.cn-hangzhou.aliyuncs.com/openthings
# 拉取镜像
docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-apiserver:v1.14.1
docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-controller-manager:v1.14.1
docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-scheduler:v1.14.1
docker pull ${MY_REGISTRY}/k8s-gcr-io-kube-proxy:v1.14.1
docker pull ${MY_REGISTRY}/k8s-gcr-io-etcd:3.3.10
docker pull ${MY_REGISTRY}/k8s-gcr-io-pause:3.1
docker pull ${MY_REGISTRY}/k8s-gcr-io-coredns:1.3.1
# 添加Tag
docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-apiserver:v1.14.1 k8s.gcr.io/kube-apiserver:v1.14.1
docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-scheduler:v1.14.1 k8s.gcr.io/kube-scheduler:v1.14.1
docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-controller-manager:v1.14.1 k8s.gcr.io/kube-controller-manager:v1.14.1
docker tag ${MY_REGISTRY}/k8s-gcr-io-kube-proxy:v1.14.1 k8s.gcr.io/kube-proxy:v1.14.1
docker tag ${MY_REGISTRY}/k8s-gcr-io-etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag ${MY_REGISTRY}/k8s-gcr-io-pause:3.1 k8s.gcr.io/pause:3.1
docker tag ${MY_REGISTRY}/k8s-gcr-io-coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
7.2 初始化主节点
kubeadm init --kubernetes-version=v1.14.1 --apiserver-advertise-address=10.18.18.16 --pod-network-cidr=10.244.0.0/16
注:主节点只能初始化一次,如果需要重新初始化的,可以通过kubead reset 重置。
7.3 配置集群
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
echo export KUBECONFIG=~/.kube/config>> ~/.bashrc
source ~/.bashrc
7.4 查看集群状态
[root@server1 ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
7.5 安装flannel网络
我们是使用kubectl来安装flannel网络。 可以使用以下百度云盘的kube-flannel.yml
链接:https://pan.baidu.com/s/1sDHQLc6UAK9MIwm5HiE_Qg
提取码:zada
通过下面的命令安装网络。
kubectl apply -f kube-flannel.yml
查看flannel安装是否成功:kubectl get pods --all-namespace
这里kubernetes的主节点和网络都已经设置完成了。下面就是组建集群。 包括:minior节点的加入和移出集群,主节点同时充当工作节点的设置。
kubernetes的master node,通常情况下只负责整个集群的所有pod的调度, 并不作为minior node负载具体的pod。当master node的资源比较充裕、整个集群规模不大,可以把master node设置成同时负载pod,以提供服务器的总负载能力。
8.1 查看主节点(server1.ukr),可以被分配pod的策略
[root@server1 ~]# kubectl describe node server1.ukr | grep Taint
Taints: node-role.kubernetes.io/master:NoSchedule
这表示只有拥有和这个 taint 相匹配的 toleration 的 pod 才能够被分配到 server1.ukr 这个节点。 显然这个是设置了负载门槛的。我们可以通过以下方式删除这种策略,让主节点和其他minior节点一样,任意负载pod。 当然你可以通过设置toleration的匹配规则,在不删除taints的情况下使用主节点
8.2 删除主节点(server1.ukr)的被分配pod的策略
[root@server1 ~]# kubectl taint nodes server1.ukr node-role.kubernetes.io/master-
node "server1.ukr" untainted
taint和toleration的具体使用方法参照:https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
9 向集群中添加新的工作节点
在任意一个minior的节点上执行以下操作加入到集群中去
kubeadm join server1.ukr:6443 \
--token difb39.v00p1ms46pjiyop0 \
--discovery-token-ca-cert-hash 4481f81e7db781a698c6b3491cf8f07a492eb5552f46eb81a4e29ab60f1321d9
集群的扩容和缩容具体参见:https://blog.csdn.net/shgh_2004/article/details/90439817