登录
    Technology changes quickly but people's minds change slowly.

centos 下k8s 集群部署

技术宅 破玉 424次浏览 0个评论

节点规划

准备部署一主两从 的 三节点 Kubernetes集群,整体节点规划如下表所示:

主机名 IP 角色
k8s-master 192.168.10.246 主节点
k8s-node-1 192.168.10.254 从节点1
k8s-node-2 192.168.10.170 从节点2

所有节点都需要安装以下组件:

  • Docker
  • kubelet
  • kubeadm
  • kubectl

所有节点关闭防火墙

systemctl disable firewalld.service
 systemctl stop firewalld.service

禁用SELINUX

 setenforce 0
  vi /etc/selinux/config
  SELINUX=disabled

临时关闭 swap

  swapoff -a

分别设置主机名

  hostnamectl --static set-hostname k8s-master
  hostnamectl --static set-hostname k8s-node-1
  hostnamectl --static set-hostname k8s-node-2

所有节点 主机名/IP加上 hosts解析,编辑 /etc/hosts 文件,加入以下内容:

192.168.10.246 k8s-master
  192.168.10.254 k8s-node-1
  192.168.10.170 k8s-node-2 

修改yum源

vi /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

安装 kubelet kubeadm kubectl

yum install -y kubelet-1.18.1-0 kubeadm-1.18.1-0 kubectl-1.18.1-0
systemctl enable kubelet && systemctl start kubelet

master配置

主节点执行:apiserver-advertise-address 为主节点 ip

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

参数解释:

–kubernetes-version: 用于指定k8s版本;
–apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是 master本机IP地址。
–pod-network-cidr:用于指定Pod的网络范围; 10.244.0.0/16
–service-cidr:用于指定SVC的网络范围;
–image-repository: 指定阿里云镜像仓库地址

这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址。
上述命令执行完后注意保存输出 的 token 和hash 值.

配置 kubectl

在 Master上 root⽤户执行如下列命令来配置 kubectl:

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
echo $KUBECONFIG

安装Pod网络

sysctl net.bridge.bridge-nf-call-iptables=1

master 执行:

kubectl apply -f kube-flannel.yaml

yaml 文件地址:https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果yml中的”Network”: “10.244.0.0/16″和kubeadm init xxx –pod-network-cidr不一样,就需要修改成一样的。不然可能会使得Node间Cluster IP不通。
查看yaml需要的镜像:

cat kube-flannel.yml |grep image|uniq
        image: quay.io/coreos/flannel:v0.12.0-amd64
        image: quay.io/coreos/flannel:v0.12.0-arm64
        image: quay.io/coreos/flannel:v0.12.0-arm
        image: quay.io/coreos/flannel:v0.12.0-ppc64le
        image: quay.io/coreos/flannel:v0.12.0-s390x

注意:这些镜像都是需要访问谷歌才行的。
但是阿里云容器镜像服务ACR里面是有的,访问链接如下:
https://www.aliyun.com/product/acr
注意:必须使用阿里云账号登录才行。
例如:

docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64
docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm64
docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm
docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-ppc64le
docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-s390x

为镜像打tag,保持和yaml文件一样。

ocker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64 quay.io/coreos/flannel:v0.12.0-amd64
docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm64 quay.io/coreos/flannel:v0.12.0-arm64
docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm quay.io/coreos/flannel:v0.12.0-arm
docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-ppc64le quay.io/coreos/flannel:v0.12.0-ppc64le
docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-s390x quay.io/coreos/flannel:v0.12.0-s390x

注意:这些镜像,也需要在node节点执行。

kubectl apply -f kube-flannel.yml

等待几分钟,查看pod 状态 都处于Running状态

kubectl get pod --all-namespaces -o wide

node 加入集群

在每个 从节点执行

kubeadm join 192.168.10.246:6443 --token rkt1p6.3m7z7pqfvaehxmxi \
    --discovery-token-ca-cert-hash sha256:dd384c51b5a38cce275dd3e178f6f1601b644f5fc2bc2f8cee9c2b031b1191

在 master 查看

kubectl get nodes -o wide

如果 token忘记,则可以去 Master上执行如下命令来获取:

kubeadm token list

hash 重新查看 master 执行

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

安装 dashboard

下载 yaml
https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
修改如下内容:

---
#增加直接访问端口
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: 30008 #增加
  selector:
    k8s-app: kubernetes-dashboard

---
#因为自动生成的证书很多浏览器无法使用,所以我们自己创建,注释掉kubernetes-dashboard-certs对象声明
#apiVersion: v1
#kind: Secret
#metadata:
#  labels:
#    k8s-app: kubernetes-dashboard
#  name: kubernetes-dashboard-certs
#  namespace: kubernetes-dashboard
#type: Opaque

---

配置证书:

mkdir dashboard-certs

cd dashboard-certs/

#创建命名空间
kubectl create namespace kubernetes-dashboard

# 创建key文件
openssl genrsa -out dashboard.key 2048

#证书请求
openssl req -days 36000 -new -out dashboard.csr -key dashboard.key -subj '/CN=dashboard-cert'

#自签证书
openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt

#创建kubernetes-dashboard-certs对象
kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard

创建dashboard

kubectl create -f  recommended.yaml

创建 管理员

vi dashboard-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: dashboard-admin
  namespace: kubernetes-dashboard
#保存退出后执行
kubectl create -f dashboard-admin.yaml

#为用户分配权限
vi dashboard-admin-bind-cluster-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin-bind-cluster-role
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: dashboard-admin
  namespace: kubernetes-dashboard
#保存退出后执行
kubectl create -f dashboard-admin-bind-cluster-role.yaml
#查看并复制用户Token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}')

华裳绕指柔, 版权所有丨如未注明 , 均为原创|转载请注明centos 下k8s 集群部署
喜欢 (4)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址