k8s集群搭建

前言

k8s作为一个容器编排工具,因为其简化容器管理,提升工作效率而备受青睐。但是由于某些不可描述的原因,在中国部署k8s要更加困难,所以这里介绍一种不用科学上网部署k8s-1.14.2版本的方法。

部署环境

IP地址节点角色CPU数内存主机名
192.168.88.200master22Gmaster
192.168.88.201node22Gnode1
192.168.88.201node22Gnode2

master节点的内存占用很严重,有条件尽量多给一点,最少2G,亲测卡的要死。
并且完成域名解析

准备工作

以下操作须在所有主机中进行

关闭selinux和firewalld

setenforce 0
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld

关闭swap

swapoff -a
vim /etc/fstab	#将包含swap的行注释

配置内核参数,将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

配置yum源

docker和kubernetes的yum源都可以用阿里源

软件安装

以下操作须在所有主机中进行

安装docker

如果有其他版本的docker建议先删除
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker
systemctl restart docker
检查docker版本
docker --version
出现的应该是这个
Docker version 18.06.1-ce, build e68fc7a

安装kubernetes

yum install -y kubelet-1.14.2 kubectl-1.14.2 kubeadm-1.14.2
systemctl enable kubelet
一定要先设置kubelet开机自启,如果不设置等会会报错;但是不要启动,现在启动不了

部署master节点

初始化k8s集群

kubeadm init --kubernetes-version=1.14.2 \
--apiserver-advertise-address=192.168.88.200 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

这一步至关重要,无数初学者卡在这里并且尝试了各种报错:

第一行的参数是因为在执行 kubeadm init 时,会先请求https://dl.k8s.io/release/stable-1.txt获取最新稳定的版本号,该地址实际会跳转到https://storage.googleapis.com/kubernetes-release/release/stable-1.txt,在国内由于被墙无法请求该地址,到时候就会报错,为了避免这个问题,我们必须直接指定要获取的版本。

第二行就是我们master节点的IP地址。

第三行很关键,由于kubeadm默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址,很多人初次部署都卡在此环节无法进行后续配置。

集群初始化成功后返回如下信息:
要保留生成的最后部分内容,此内容需要在其它节点加入kubernetes集群时执行。

看到第一行末尾这个successfully了吗
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:

kubeadm join 192.168.88.200:6443 --token xotym5.cjolyg20cj17n56l \
    --discovery-token-ca-cert-hash sha256:0b2bc20381b7e410beb4a98296a10ec29e6184301f1c3058f5cae81a385ed3c4

配置kubectl工具

mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config
kubectl get nodes
kubectl get cs

这时候节点notready,不用担心,因为我们还没配置网络

部署flannel网络

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

执行完后应该会看见

clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created

部署node节点

在所有node节点上进行

kubeadm join 192.168.88.200:6443 --token xotym5.cjolyg20cj17n56l \
    --discovery-token-ca-cert-hash sha256:0b2bc20381b7e410beb4a98296a10ec29e6184301f1c3058f5cae81a385ed3c4

就是刚才强调的那段的最后两行

集群状态检测

kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   8m27s   v1.14.2
node1    Ready    <none>   6m32s   v1.14.2
node2    Ready    <none>   6m28s   v1.14.2

刚开始可能会有节点notready,一般是正常情况,等一两分钟再看看

创建pod试验一下

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

部署dashboard

kubernetes-dashboard是k8s的web页面管理工具,通过dashboard可以在浏览器上打开k8s集群的管理界面,这样我们既可以通过命令行也可以通过web页面来管理k8s集群。

在master节点进行

创建Dashboard的yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
编辑此文件
sed -i 's/k8s.gcr.io/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' kubernetes-dashboard.yaml
sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml

如果不用sed命令而直接vim编辑,应该修改的有:

在Dashboard Deployment部分修改Dashboard镜像下载链接,由于默认从官方社区下载,在国内不翻墙是下载不到的,所以让它去找阿里源下载

    spec:
      containers:
      - name: kubernetes-dashboard
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1

在Dashboard Service内容加入nodePort: 30001和type: NodePort两项内容,将Dashboard访问端口映射为节点端口,以供外部访问

spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  type: NodePort

部署Dashboard

kubectl create -f kubernetes-dashboard.yaml

##创建完成后,检查相关服务运行状态

kubectl get deployment kubernetes-dashboard -n kube-system
kubectl get pods -n kube-system -o wide
kubectl get services -n kube-system
netstat -anp|grep 30001

浏览器访问:https://192.168.88.200:30001,最好用火狐浏览器。
在这里插入图片描述

查看访问Dashboard的认证令牌

kubectl create serviceaccount  dashboard-admin -n kube-system
kubectl create clusterrolebinding  dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

执行完后会显示这样一堆信息

Name:         dashboard-admin-token-hvmbg
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: dashboard-admin
              kubernetes.io/service-account.uid: 451dec54-f6db-11e9-a751-000c295b0b94

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4taHZtYmciLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNDUxZGVjNTQtZjZkYi0xMWU5LWE3NTEtMDAwYzI5NWIwYjk0Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.c0LvOThTfmd1AEFdnuXkQikSSgF1zde5wxTuYOcAU4f0x5NHHEz_uwq_zZowieNTZSmqU2KhNzjMmVMhVEWMelsQKrQ-xyXUbUduP4JHXSMG4TW11INUiLjJGWfxgyCQe5di3EGwSw5Yc7lj8ArGlWpgiebMC8bv-VWaXoCleoDxF2hxn5J3Er4HNXs34CpmD97mHLSGqeUJpyXyJDQN-QeFzKHQy1JIWQWysFiZTS0dct1bujjciSrUp-sGu-CGoUR1ntB00vL_jNVTJMVRq97e2H32pvN_B3rNMuRDB4pMED5lamPk_K_oRRjWUSCVLsYfFVqNtgXaHCNdZACyMw

把token复制到输入令牌处即可,到此kubernetes集群正式搭建完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值