kubernetes 集群搭建

本文简要描述了kubernetes 集群再centos 7 上的搭建。

1.准备: 三台centos 7 虚拟机, 配置相同2core 4G 内存。一台用于master, 两台node。

2.三台机器都需要安装 docker : Docker version 18.03.0-ce, build 0520e24

3.由于kubernetes会自身管理网络,磁盘,内存,IO 等,所以需要linux系统做出如下操作:(三台机器都需要操作)

3.1 关闭防火墙:

$ systemctl stop firewalld
$ systemctl disable firewalld

3.2 关闭selinux:

$ sed -i ‘s/enforcing/disabled/’ /etc/selinux/config

$ setenforce 0

3.3 关闭swap:

$ swapoff -a

$ vim /etc/fstab (修改这个文件,把swap那行注释掉即可)

3.4 修改主机名:(不修改的话,k8s启动会有名称冲突,因为默认都是localhost.local)

$ hostnamectl set-hostname k8s-master (设置master机器的名称为k8s-master)

$ hostnamectl set-hostname k8s-node2 (设置一台node机器的名称为k8s-node2)

$ hostnamectl set-hostname k8s-node3 (设置另一台node机器的名称为k8s-node3)

3.5 分别配置三台机器的hosts:

$ vi /etc/hosts 添加如下内容

192.168.8.132 k8s-master (我的master局域网地址)

192.168.8.133 k8s-node2 (我的node2局域网地址)

192.168.8.134 k8s-node3 (我的node3局域网地址)

3.6 配置桥接到路由表里:

$ cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

  1. 安装k8s:由于k8s 源再国内无法访问,需要设置成阿里的源: 执行以下命令先设置源:

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
然后就可以运行下面命令安装k8s 核心组件:

$ yum install -y kubelet kubeadm kubectl

然后启动:

$ systemctl enable kubelet

  1. 至此, 三台机器的k8s基本安装完成。接下来要初始化和启动集群:

5.1 在master上执行下面命令: (ip是master 的本机ip,v1.18.2是k8s 的版本。我本机使用上面源安装的就是1.18.2。 pod-network-cidr=10.244.0.0/16 是k8s 的网络插件。 k8s支持很多种网络插件。 其中10.244.0.0/16 使用的是一个叫flannel 的插件。还有很多不同的插件,就需要配置不同的ip段。这里使用flannel即可。)

$ kubeadm init --apiserver-advertise-address=192.168.8.132 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.2 --pod-network-cidr=10.244.0.0/16

上面这条命令就是初始化了许多证书cert. 可以在/etc/kubernetes 下看到。

5.2 初始化证书后,可以配置环境变量:依次执行以下命令:

$ mkdir -p $HOME/.kube

$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

$ sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

然后就可以用下面命令看到起来的node了。

$kubectl get nodes

5.3 接下来,由于上面初始化使用的10.244.0.0/16 (代表着flannel网络),所以需要把flannel 插件下载安装。 同样由于国内无法访问。 我找了个***把文件内容复制了下来。 然后再上传到master 的机器上新建flannel.yml 文件。 然后粘贴下面内容:

然后运行命令: $ kubectl apply -f flannel.yml

至此master 安装完成。

  1. master 节点已经启动,此时需要把node2,node3 接入进来。接入很简单,就是把master启动的那个命令复制一下。 在 node2 和node3 上执行即可:

$ kubeadm join 192.168.8.132:6443 --token beaueq.6p220xifr5chpzxr --discovery-token-ca-cert-hash sha256:25b801bd749cdfdb…7ac86b53a2af217c914deb482bdba5b66

  1. 回到master上执行:

$ kubectl get nodes

可以看到master 和两个node都是ready状态。

7.1 接下来可以安装官方提供的dashboard。我的k8s 是1.8.2 ,dashboard v2.0.0正好支持,所以下载下面这个即可。(同理自己找VPN下载,然后copy到服务器上。)

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml(我本地叫recommanded.yml)

7.2 master上新建一个admin-user-rolebinding…yml,用于配置更大的用户权限。

admin-user-rolebinding.yml内容如下。

apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard


apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:

  • kind: ServiceAccount
    name: admin-user

namespace: kubernetes-dashboard

最后同样 $ kubectl apply -f admin-user-rolebinding.yml

7.3 获取登录的token:

$ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk ‘{print $1}’)

  1. 最后把dashboard 服务改成对外服务。(k8s默认启动cluster-ip类型,集群内部可以调用, 暴露成NodePort后,外部才能访问。$ kubectl get svc 可以看到暴露的端口号)

$ kubectl -n kubernetes-dashboard patch svc kubernetes-dashboard -p ‘{“spec”:{“type”:“NodePort”}}’

  1. 如果可以访问的话那么用token方式登录, 粘贴上面的token即可。 但是实际用浏览器打开会报错。需要自己重新生成证书

9.1先 删除 kubectl delete -f recommanded.yml 。 删除后把recommanded.yml 进行修改。

编辑recommanded.yml 删除secret部分:

apiVersion: v1

kind: Secret

metadata:

labels:

k8s-app: kubernetes-dashboard

name: kubernetes-dashboard-certs

namespace: kubernetes-dashboard

type: Opaque


修改service 资源,改为nodeport 类型:

kind: Service

apiVersion: v1

metadata:

labels:

k8s-app: kubernetes-dashboard

name: kubernetes-dashboard

namespace: kubernetes-dashboard

spec:

type: NodePort

ports:

  • port: 443

targetPort: 8443

nodePort: 31779

selector:

k8s-app: kubernetes-dashboard


9.2创建证书:
$ mkdir /ssl && cd /ssl
$ openssl genrsa -out ca.key 2048
$ openssl req -new -x509 -key ca.key -out ca.crt -days 3650 -subj “/C=CN/ST=HB/L=WH/O=DM/OU=YPT/CN=CA”
$ openssl x509 -in ca.crt -noout -text
9.3签发证书:
$ openssl genrsa -out dashboard.key 2048
$ openssl req -new -sha256 -key dashboard.key -out dashboard.csr -subj “/C=CN/ST=HB/L=WH/O=DM/OU=YPT/CN=192.168.8.132”
$ vi dashboard.cnf
extensions = san
[san]
keyUsage = digitalSignature
extendedKeyUsage = clientAuth,serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = IP:192.168.8.132,DNS:localhost
$ openssl x509 -req -sha256 -days 3650 -in dashboard.csr -out dashboard.crt -CA ca.crt -CAkey ca.key -CAcreateserial -extfile dashboard.cnf
$ openssl x509 -in dashboard.crt -noout -text
9.4挂载证书到kubernetes-dashboard

重新部署
$ kubectl apply -f recommended.yml admin-user-rolebinding.yml

$ kubectl create secret generic kubernetes-dashboard-certs --from-file="./dashboard.crt,./dashboard.key" -n kubernetes-dashboard

9.5. 获取token
$kubectl describe secret -n kubernetes-dashboard $(kubectl get secret -n kubernetes-dashboard | grep admin-user | awk ‘{print $1}’)

  1. 重启kube-proxy
    kubectl get pod -n kube-system | grep kube-proxy |awk ‘{system(“kubectl delete pod “$1” -n kube-system”)}’

  2. kubernetes集群使用docker注册表类型的秘密对容器注册表进行身份验证,以获取私有映像。
    如果您已经运行了Docker登录,则可以将该凭证复制到Kubernetes中:

kubectl create secret generic harborsecret \
    --from-file=.dockerconfigjson=/root/.docker/config.json \
    --type=kubernetes.io/dockerconfigjson
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值