当前位置:   article > 正文

k8s集群搭建_k8s 修改内核参数

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
  • 1
  • 2
  • 3
  • 4

关闭swap

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

配置内核参数,将桥接的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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

配置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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

安装kubernetes

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

部署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
  • 1
  • 2
  • 3
  • 4
  • 5

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

第一行的参数是因为在执行 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

配置kubectl工具

mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config
kubectl get nodes
kubectl get cs
  • 1
  • 2
  • 3
  • 4

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

部署flannel网络

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

执行完后应该会看见

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

部署node节点

在所有node节点上进行

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

  • 1
  • 2
  • 3

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

集群状态检测

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
  • 1
  • 2
  • 3
  • 4
  • 5

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

创建pod试验一下

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

部署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
  • 1
  • 2
  • 3
  • 4

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

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

    spec:
      containers:
      - name: kubernetes-dashboard
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
  • 1
  • 2
  • 3
  • 4

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

spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  type: NodePort
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

部署Dashboard

kubectl create -f kubernetes-dashboard.yaml
  • 1

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

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
  • 1
  • 2
  • 3
  • 4

浏览器访问: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}')
  • 1
  • 2
  • 3

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/128286
推荐阅读
相关标签
  

闽ICP备14008679号