简介

本片文章讲述使用 kubeadm 来安装K8S, 一般安装K8S集群的时候是使用 yun install kubernetes , 因为安装过程中需要修改各个组件启动参数, 整个过程比较复杂而且容易出错, 于是Kubernetes 开始引入 kubeadm 来简化集群部署的过程

部署要求

测试环境

在测试环境可以使用单节点Master, Node节点依据实际需求而定

生产环境

为了保证高可用. 建议在生产环境使用多个Master节点做冗余.

环境准备

安装docker, 此处不在赘述, 可以参考:

添加yum源,否则无法下载依赖

rm -rfv /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

在这里插入图片描述

关闭swap,注释swap分区

先关闭swap

swapoff -a

注释掉swap分区, 注释掉 /etc/fstab 中的swap 分区, 没有的话可以忽略

先输入

cat > /etc/sysctl.d/k8s.conf <<EOF

在输入:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

安装常用依赖

yum install vim bash-completion net-tools gcc -y

安装

安装kubeadm,kubelet和kubectl

添加阿里kubernetes源

执行 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

安装

yum install kubectl kubelet kubeadm

在这里插入图片描述
记住版本号下面的命令要用
在这里插入图片描述

启用kubectl
systemctl enable kubelet

启动K8S

172.31.179.140 为当前主机的IP, 版本号是刚刚记下来的版本号

kubeadm init --kubernetes-version=1.18.2  \
--apiserver-advertise-address=172.31.179.140   \
--image-repository registry.aliyuncs.com/google_containers  \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16

如下所示则是成功
在这里插入图片描述
记下下面的信息, 启用kubectl和其他节点加入使用,

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.122.21:6443 --token v2r5a4.veazy2xhzetpktfz \
    --discovery-token-ca-cert-hash sha256:daded8514c8350f7c238204979039ff9884d5b595ca950ba8bbce80724fd65d4

启用 kubectl

依据之前的提示

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

使用命令如下, 我们使用的root, 不用 chown

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

执行 source 使他生效

source <(kubectl completion bash)

测试命令
在这里插入图片描述
node节点为NotReady,因为corednspod没有启动,缺少网络pod

启动节点

安装网络组件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

结果如下
在这里插入图片描述

实施查看POD
kubectl get pod --all-namespaces

查看到了刚刚的网络组件
在这里插入图片描述
集群的状态也是正常的
在这里插入图片描述

安装dashboard用于访问

下载修改recommended.yaml

下载官方的yaml, 然后修改一下

wget  https://kuboard.cn/install-script/k8s-dashboard/v2.0.0-beta5.yaml

因为版本迭代 链接可能失效, 可以到官网查看最新的链接, 两个链接一般下面的那个会生效的
https://kuboard.cn/install/install-k8s-dashboard.html#

在这里插入图片描述

修改下载的yaml,官方部署dashboard的服务没使用nodeport要修改如下

vim v2.0.0-beta5.yaml

v2.0.0-beta5.yaml 是刚刚下载的文件, 之后修改其中的Service
如下图:
在这里插入图片描述

部署dashboard

执行命令应用yaml

kubectl create -f v2.0.0-beta5.yaml

显示如下则成功
在这里插入图片描述

查看创建的POD和Service

kubectl get pod -n kubernetes-dashboard
kubectl get svc -n kubernetes-dashboard

在这里插入图片描述
在这里插入图片描述

使用刚刚修改的定义的 nodePort , 30001 发现无法访问, 是K8S要求对应的浏览器必须装安全证书才可以, 或者使用火狐浏览器, 可以不用装安全证书
https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/

安全证书操作

使用火狐浏览器可以不用下面的操作.
执行如下命令

grep 'client-certificate-data' /etc/kubernetes/admin.conf | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
grep 'client-key-data' /etc/kubernetes/admin.conf | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

最后一个命令需要密码. 输入记下来
在这里插入图片描述
将生成的 kubecfg.p12 文件导入chrome, windows 下面双击安装即可, 导入到受信任的根证书颁发机构, 有了证书访问的时候要使用K8s 安装的IP, 如果使用内网IP安装, 在外网使用外网IP访问, 无法生效.

创建Service和获取登录的token

执行如下命令添加ServiceAccount

cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
EOF

创建ClusterRoleBinding和ClusterRoleBinding

cat <<EOF | kubectl create -f -
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: kube-system
EOF

使用下面的命令获取token

bash
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

将结果复制到下面
在这里插入图片描述

如下进入表示成功
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐