环境准备
IP地址 | 系统 | 主机名 |
---|---|---|
172.16.0.245 | CentOS7.6 | k8s-master |
172.16.0.246 | CentOS7.6 | k8s-node1 |
172.16.0.247 | CentOS7.6 | k8s-node2 |
在主节点上执行以下步骤
停用SELinux和防火墙服务
使用以下命令登录到您的kubernetes主节点并设置主机名并禁用selinux
~]# hostnamectl set-hostname 'k8s-master' |
停用防火墙服务
[root@k8s-master ~]# systemctl stop firewalld |
创建/etc/sysctl.d/k8s.conf 文件
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
把以上配置修改的使其生效。
[root@k8s-master ~]# modprobe br_netfilter
[root@k8s-master ~]# sysctl -p /etc/sysctl.d/k8s.conf
`
使用swapoff -a
命令禁用所有节点的swap分区,并从/etc/fstab
文件中删除或注释掉交换分区或交换文件
[root@k8s-master ~]# sed -i '/swap/ s/^/#/' /etc/fstab
[root@k8s-master ~]# swapoff -a
注意:如果您没有自己的dns服务器,请在主节点和工作节点上更新/etc/hosts
文件
cat << EOF >> /etc/hosts |
配置Kubernetes存储库
Kubernetes包在默认的CentOS 7和RHEL 7存储库中不可用,请使用下面的命令来配置它的包存储库
[root@k8s-master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo |
安装Kubeadm和Docker
配置软件包存储库后,运行下面的命令来安装kubeadm和docker软件包。
[root@k8s-master ~]# yum install kubeadm docker -y |
启动并启用Kubectl和Docker服务
[root@k8s-master ~]# systemctl restart docker && systemctl enable docker |
使用”kubeadm init”初始化Kubernetes Master
运行下面的命令以初始化和设置kubernetes master。
[root@k8s-master ~]# kubeadm init \ |
参数说明
--apiserver-advertise-address:表示apiserver对外的地址是什么,默认是0.0.0.0 |
上面命令的输出如下所示
正如我们在输出中看到的那样,kubernetes master已成功初始化。 执行以下命令以将群集用作root用户。
[root@k8s-master ~]# mkdir -p $HOME/.kube |
将pod网络部署到集群
尝试运行以下命令以获取集群和Pod的状态。
要准备好群集状态并运行kube-dns状态,请部署Pod网络,以使不同主机的容器相互通信。 POD网络是工作节点之间的覆盖网络。
运行下面的命令来部署网络
[root@k8s-master ~]# export kubever=$(kubectl version | base64 | tr -d '\n') |
现在运行以下命令以验证状态
[root@k8s-master ~]# kubectl get node |
现在,我们将工作程序节点添加到Kubernetes主节点。
在每个工作节点上执行以下步骤
停用SELinux和防火墙服务
在禁用SELinux之前,将两个节点上的主机名分别设置为k8s-node1
和k8s-node2
~]# hostnamectl set-hostname 'k8s-node{1 or 2}' |
停用防火墙服务,创建/etc/sysctl.d/k8s.conf 文件,禁用所有节点的swap分区,参考主节点配置
在两个工作节点上配置Kubernetes存储库
Kubernetes包在默认的CentOS 7和RHEL 7存储库中不可用,请使用下面的命令来配置它的包存储库
~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo |
在两个节点上安装kubeadm和docker软件包
[root@worker-node1 ~]# yum install kubeadm docker -y |
启动并启用Docker服务
[root@worker-node1 ~]# systemctl restart docker && systemctl enable docker |
现在将工作程序节点加入主节点
要将工作程序节点连接到主节点,需要令牌。 只要kubernetes master初始化了,那么在输出中我们就会得到命令和令牌。 复制该命令并在两个节点上运行。
[root@k8s-node1 ~]# kubeadm join 172.16.0.245:6443 --token m9fx3v.6hmjql19cxsonz6q \ |
上面命令的输出如下所示
[root@k8s-node2 ~]# kubeadm join 172.16.0.245:6443 --token m9fx3v.6hmjql19cxsonz6q \ |
输出如下所示
现在使用kubectl命令从主节点验证节点状态
[root@k8s-master ~]# kubectl get node |
我们可以看到,主节点和工作节点都处于就绪状态。这表明kubernetes 1.8已经成功安装,并且我们已经成功连接了两个工作节点。现在我们可以创建pods和服务。
部署 Dashboard UI
安装步骤
默认情况下不会部署 Dashboard。可以通过以下命令部署:
[root@k8s-master ~]# curl -o dashboard-ui.yaml https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml |
为了测试方便,我们将Service
改成NodePort
类型,注意 YAML 中最下面的 Service 部分新增一个type=NodePort
kind: Service |
然后直接部署新版本的dashboard
即可
[root@k8s-master ~]# kubectl apply -f dashboard-ui.yaml |
然后我们可以查看 dashboard 的外网访问端口
[root@k8s-master ~]# kubectl get svc -n kubernetes-dashboard |
然后直接访问集群中的任何一个节点 IP 加上上面的30599端口即可打开 dashboard 页面了
由于 dashboard 默认是自建的 https 证书,该证书是不受浏览器信任的,所以我们需要强制跳转就可以了。
默认 dashboard 会跳转到登录页面,我们可以看到 dashboard 提供了Kubeconfig
和token
两种登录方式
身份认证
登录 dashboard 的时候支持 Kubeconfig 和token 两种认证方式,Kubeconfig 中也依赖token 字段,所以生成token 这一步是必不可少的。
生成token
使用下面的yaml文件创建admin-user
用户并赋予cluster-admin
角色权限,然后就可以通过token 登陆dashbaord,这种认证方式本质实际上是通过Service Account 的身份认证加上Bearer token请求 API server 的方式实现,参考创建示例用户和Kubernetes 中的认证。
重要信息:在继续操作之前,请确保您知道自己在做什么。向仪表板的服务帐户授予管理员特权可能会带来安全风险。
[root@k8s-master ~]# vi dashboard-adminuser.yaml |
第一部分:ServiceAccount
中我们首先在命名空间kubernets-dashboard
中创建名为admin-user
的服务帐户。
第二部分:ClusterRoleBinding
中将admin-user
的服务帐户赋予cluster-admin
角色权限
注意:Kubernetes版本之间,ClusterRoleBinding资源的apiVersion可能有所不同。 在Kubernetes v1.8之前,apiVersion是rbac.authorization.k8s.io/v1beta1。
apiVersion: v1 |
使用kubectl apply -f dashboard-adminuser.yaml
创建用户和赋权
[root@k8s-master ~]# kubectl apply -f dashboard-adminuser.yaml |
获取token
现在我们需要找到可以用来登录的令牌。执行以下命令
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') |
它应该打印如下内容
Name: admin-user-token-44nrl |
登录Dashboard
现在复制token并将其粘贴到登录屏幕上的Enter token字段中。
点击登录按钮,正如你所见,您现在以管理员身份登录。