Centos7搭建k8s集群(三台虚拟机)
目录Background1、安装环境2、关闭防火墙3、关闭selinux4、关闭swap5、配置主机名与IP对应关系6、将桥接的IPv4流量传递到iptables7、配置免密登录8、安装docker9、添加阿里云源10、安装kubeadm,kubelet,kubectl(所有节点)11、部署k8s master(主节点)12、使用kubectl工具13、安装pod网络插件(CNI)(所有节点)14
·
目录
- Background
- 1、安装环境
- 2、关闭防火墙
- 3、关闭selinux
- 4、关闭swap
- 5、配置主机名与IP对应关系
- 6、将桥接的IPv4流量传递到iptables
- 7、配置免密登录(可选)
- 8、安装docker
- 9、添加阿里云源
- 10、安装kubeadm,kubelet,kubectl(所有节点)
- 11、部署k8s master(主节点)
- 12、使用kubectl工具
- 13、安装pod网络插件(CNI)(所有节点)
- 14、节点加入集群(在node节点执行)
- 15、部署dashboard
- 16、创建service account并绑定默认cluster-admin管理员集群角色
- 17、使用输出的token登录Dashboard
- 18、删除节点1(在master节点执行)
- 19、添加节点1
- 参考资料
Background
网上相关经验已有很多,这里对自己的安装过程做个记录,方便以后查阅。
- kubernetes,简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
- kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。
1、安装环境
- 三台虚拟机【主节点:4核4G,节点都是2核2G】
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- Centos 7.5.1804
- docker: 18.06.1
- kubelet:V1.13.3
2、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
3、关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
4、关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
5、配置主机名与IP对应关系
cat << EOF >> /etc/hosts
192.168.0.70 k8s-master
192.168.0.71 k8s-node1
192.168.0.72 k8s-node2
EOF
6、将桥接的IPv4流量传递到iptables
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
7、配置免密登录(可选)
# 所有节点执行,四次回车
ssh-keygen -t rsa
# 所有节点执行,有几个节点执行几次
ssh-copy-id [每个节点的IP]
8、安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker version
- 更换国内镜像源
cat <<EOF> /etc/docker/daemon.json
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
EOF
- 重载配置文件重启docker生效
systemctl daemon-reload
systemctl restart docker
9、添加阿里云源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
10、安装kubeadm,kubelet,kubectl(所有节点)
yum install -y kubelet-1.13.3 kubeadm-1.13.3 kubectl-1.13.3 kubernetes-cni-0.6.0
systemctl enable kubelet
11、部署k8s master(主节点)
该条命令执行完,会打印出使用kubectl工具需要执行的命令,以及其它节点加入集群需要执行的命令。
kubeadm init \
--apiserver-advertise-address=192.168.0.70 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.13.3 \
--service-cidr=10.1.0.0/16\
--pod-network-cidr=10.244.0.0/16
12、使用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 nodes
13、安装pod网络插件(CNI)(所有节点)
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sed -i 's/quay.io\/coreos/registry.cn-beijing.aliyuncs.com\/imcto/g' kube-flannel.yml
kubectl apply -f kube-flannel.yml
14、节点加入集群(在node节点执行)
执行你的在kubeadm init输出的kubeadm join命令,下面的是我的。上面11步执行后生成的。
kubeadm join 192.168.0.71:6443 --token l79g5t.6ov4jkddwqki1dxe --discovery-token-
ca-cert-hash sha256:4f07f9068c543130461c9db368d62b4aabc22105451057f887defa35f47fa076
kubeadm join 192.168.0.72:6443 --token l79g5t.6ov4jkddwqki1dxe --discovery-token-
ca-cert-hash sha256:4f07f9068c543130461c9db368d62b4aabc22105451057f887defa35f47fa076
- 验证集群各节点是否正常,如下图所示为正常,如果出现notReady,请看最后的参考资料解决。
kubectl get nodes
15、部署dashboard
- 下载配置文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
-
默认镜像国内无法访问,修改镜像地址为
reg.qiniu.com/k8s/kubernetes-dashboard-amd64:v1.8.3
,如下图所示
-
默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露端口到外部,如下图所示
-
开始部署
kubectl apply -f kubernetes-dashboard.yaml
- 测试部署是否成功
kubectl get pods,svc -n kube-system
- 重新部署命令(若需要时)
kubectl delete -f kubernetes-dashboard.yaml
kubectl apply -f kubernetes-dashboard.yaml
16、创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
- 输出token登录信息
kubectl describe secrets -n kube-system dashboard-admin
17、使用输出的token登录Dashboard
- 首先查看Dashboard服务被分配到了哪个节点
需要注意:可不是在哪个节点部署最后服务就会在哪个节点,就像我的,我在主节点部署,最后服务是被分配到了node2节点。另外,status列都是Running服务才是正常,如果出现ImagePullBackOff或者CrashLoopBackOff等,请看最后参考资料解决。
kubectl get pods --all-namespaces -o wide
- 然后浏览器访问
https:192.168.0.72:30001
- 谷歌浏览器可能会遇到不是私密链接的问题,如下图所示,在当前页面敲键盘输入
thisisunsafe
即可跳转到登录页面。
18、删除节点1(在master节点执行)
kubectl drain k8s-node1 --delete-local-data --force --ignore-daemonsets
kubectl delete node k8s-node1
kubectl get nodes
19、添加节点1
- 在node1执行
kubeadm reset
- 在主节点执行,根据生成的节点加入命令在node1节点执行加入就行了。
[root@k8s-master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.0.70:6443 --token 1a1xzk.1yizznmyqho4a4p0 --discovery-token-ca-cert-hash sha256:0b729fe83194bd397b2cc4801ef899d4c40395a61f0fabc0c651bddc423d438a
- 在node1执行
[root@k8s-node1 ~]# kubeadm join 192.168.0.70:6443 --token p08kmc.nci5h0xfmlcw92vg --discovery-token-ca-cert-hash sha256:44315d59e08f4d94bc75d20730b861818dfeda6517c1b228399f061f4256329b
[preflight] Running pre-flight checks
[discovery] Trying to connect to API Server "192.168.0.70:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://192.168.0.70:6443"
[discovery] Requesting info from "https://192.168.0.70:6443" again to validate TLS against the pinned public key
[discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server "192.168.0.70:6443"
[discovery] Successfully established connection with API Server "192.168.0.70:6443"
[join] Reading configuration from the cluster...
[join] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet] Downloading configuration for the kubelet from the "kubelet-config-1.13" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Activating the kubelet service
[tlsbootstrap] Waiting for the kubelet to perform the TLS Bootstrap...
[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "k8s-node1" as an annotation
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the master to see this node join the cluster.
- 在主节点执行
kubectl get nodes
参考资料
更多推荐
已为社区贡献6条内容
所有评论(0)