ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux部署K8S(亲测有效)

2022-07-30 14:05:19  阅读:206  来源: 互联网

标签:kubectl kubernetes -- admin token dashboard Linux K8S 亲测


环境搭建说明

1:安装Linux版本为:CentOS-7-x86_64-DVD

 Linux版本:CentOS-7-x86_64-DVD-1908.iso

 

2:Linux安装教程,请参考以下地址:

https://blog.csdn.net/qq_38129621/article/details/105866574

 

3:架构图:

1:机器准备

这里我们准备三台虚拟机,一台master,二台node

机器角色

IP

主机名

Master

10.66.103.98

K8sMaster

Node1

10.66.104.153

K8sNode1

Node2

10.66.103.174

K8sNode2

 

2:安装前的环境确认

所有机器都需要执行:

a:三台机器都可以联网,uname -a查看内核是否大于等于3.1

b:关闭三台机器的防火墙

systemctl stop firewalld

systemctl disable firewalld

c:关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config

d:关闭swap

swapoff -a

vi /etc/fstab

注释这一行:/mnt/swap swap swap defaults 0 0

free -m查看swap是否全为0

e:配置三台机器的主机名,分别在三台机器上执行命令

10.66.103.98上执行:hostnamectl set-hostname k8smaster

10.66.103.153上执行:hostnamectl set-hostname k8snode1

10.66.103.174上执行:hostnamectl set-hostname k8snode2

f:在master的机器上添加hosts,在10.100.0.131上执行命令

cat >> /etc/hosts << EOF

10.66.103.98 k8smaster

10.66.103.153 k8snode1

10.66.103.174 k8snode2

EOF

g:将桥接的IPV4流量传递到iptables的链,三台机器都执行命令

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

net.bridge.bridge-nf-call-ip6tables = 1

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

EOF

h:所有节点执行命令,生效

sysctl --system

i:同步每个服务器的时间和时区

若遇到yum被占用时请执行:rm -f /var/run/yum.pid(强制停止yum进程)

yum install ntpdate -y ntpdate time.windows.com cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

3:三台机器全部安装docker

所有机器都需安装

3.1:配置阿里云的镜像

 

3.2:刷新yum源

yum clean all

yum makecache

yum -y update

3.3:安装docker

yum -y install docker-ce-18.06.1.ce-3.el7

如果之前机器上有安装过,先删除,执行

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

3.4:启动docker,并设为开机自启动

systemctl enable docker && systemctl start docker

 

4:配置kubeadm,kubelet,kubectl镜像

所有机器都需要:

kubelet:运行在集群所有节点上,负责启动POD和容器

kubeadm:用于初始化集群

kubectl:kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件

4.1:创建yum源的文件

cat > kubernetes.repo << EOF

[kubernetes]

name=Kubernetes

baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=1

repo_gpgcheck=0

gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

EOF

4.2:将文件移到yum的目录

mv kubernetes.repo /etc/yum.repos.d/

 

5:安装kubeadm,kubelet,kubectl

所有机器都需要:

yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0

systemctl enable kubelet

 

6:初始化kubeadm(只在master机器上)

只执行master机器10.66.103.98:

 

 

 

 

7:将k8s生成的管理员连接k8s集群的配置文件考到它默认的工作目录

只执行master机器10.100.0.131:

这样就可以通过kubectl连接k8s集群了,执行命令:

mkdir -p $HOME/.kube

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

sudo chown $(id -u):$(id -g) $HOME/.kube/config

测试:

kubectl get node

 

8:安装pod网络插件CNI

只执行master机器10.100.0.131:

 

 

 

装好之后执行

kubectl get pods -n kube-system

所有组件状态都为:Running

9:将节点加入集群中

9.1:执行命令(在master机器上)

kubeadm token list #查看现在有的token

kubeadm token create #生成一个新的token

kubeadm token create --ttl 0 #生成一个永远不过期的token

 

9.2:获取ca证书sha256编码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/^.* //'

 

9.3:加入节点(在要加入的机器上)

kubeadm join master机器Ip:6443 --token 9.1步查到没过期的token --discovery-token-ca-cert-hash sha256:9.2中获取的字符串

例:

kubeadm join 10.66.103.98:6443 --token uawh0f.urbo8j5ssadnansx --discovery-token-ca-cert-hash sha256:532bf485924a4438aa81322db515d5fb5b8f738852abf8ad2b62d588f85afdcc

如果node节点已经增加了对master的绑定可根据:kubeadm reset -f 解除绑定再进行绑定。

 

9.4:在master机器上执行命令,查看现在的节点情况

kubectl get nodes

 

可以看到,刚才加入的二个节点状态是NotReady,是因为它的网络还没有准备好,过几分钟再看,就会变成Read状态

 

10:部署K8s的管理页面Dashboard

10.1:在master中执行下列命令:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

 

10.2:

默认Dashboard只能集群内部访问,需要修改service为nodePort类型,暴露到外部,执行命令将配置文件下载下来

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

 

10.3:修改这个文件

vi recommended.yaml

找到这段,增加红包部分,冒号后面有一个空格,千万要注意

spec:

type: NodePort

ports:

- port: 443

targetPort: 8443

nodePort: 30001

selector:

k8s-app: kubernetes-dashboard

10.4:重新加载运行配置文件

kubectl apply -f recommended.yaml

 

11:访问k8s管理页面

https://master机器ip:30001

注意:这里必须是https的方式,如果谷哥浏览器不能访问,谷哥有的版本没有添加信任的地方,无法访问,可使用firefox或者其它浏览器。

 

12:访问不了k8s管理页面时,访问UI页面

#新建目录:

mkdir key && cd key

 

#生成证书

openssl genrsa -out dashboard.key 2048

 

#我这里写的自己的node1节点,因为我是通过nodeport访问的;如果通过apiserver访问,可以写成自己的master节点ip

openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=10.247.62.213'

openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt

 

#删除原有的证书secret

kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard

 

#创建新的证书secret

kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard

 

#查看pod

kubectl get pod -n kubernetes-dashboard

 

#重启pod

kubectl delete pod kubernetes-dashboard-7b5bf5d559-gn4ls  -n kubernetes-dashboard

 

获取UI登录 Token

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

 

13:解决kubernetes-dashboard可视化问题(可参考以下网站)

 

 其实进入刚才可视化一堆提示的画面,所有功能都实现了,为什么集群信息没有显示呢,是因为权限不够,简单说就是登录token字符串命令,并没有查看集群信息的权限,我们要做的是创建一个可以访问集群全部权限的token,或者说某个用户是超级管理员使用这个用户的token.

 

token令牌认证登录

 

(1)创建serviceaccount

[root@kubernetes01 pki]# kubectl create serviceaccount dashboard-admin -n kube-system

serviceaccount/dashboard-admin created

 

[root@kubernetes01 pki]# kubectl get sa -n kube-system

NAME                                 SECRETS   AGE

。。。。。。

dashboard-admin                          1         17s

。。。。。。

 

(2)把serviceaccount绑定在clusteradmin,授权serviceaccount用户具有整个集群的访问管理权限

 

[root@kubernetes01 pki]# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

clusterrolebinding.rbac.authorization.k8s.io/dashboard-cluster-admin created

 

(3)获取serviceaccount的secret信息,可得到token(令牌)的信息

[root@kubernetes01 pki]# kubectl get secret -n kube-system|grep dash

 

注意使用新创建token:dashboard-admin-token-kk862

[root@kubernetes01 pki]# kubectl describe secret dashboard-admin-token-kk862 -n kube-system

(4)通过patch暴露端口

 

[root@kubernetes01 pki]# kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system

service/kubernetes-dashboard patched (no change)

 

[root@kubernetes01 pki]# kubectl get svc -n kube-system

(5)浏览器访问登录,把token粘贴进去登录即可

 

2 kubeconfig配置文件登录

创建一个只能对default名称空间有权限的serviceaccount

 

[root@kubernetes01 pki]#  kubectl create serviceaccount def-ns-admin -n default

[root@kubernetes01 pki]#  kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin

rolebinding.rbac.authorization.k8s.io/def-ns-admin created

[root@kubernetes01 pki]#  kubectl get secret

[root@master1 pki]# kubectl describe secret def-ns-admin-token-xdvx5

 

 

 

  常用命令

查看那些端口开放

netstat -ntlp

 

启动防火墙

systemctl start firewalld

 

开放指定端口

firewall-cmd --zone=public --add-port=30001/tcp --permanent

 

查看防火墙状态

systemctl status firewalld.service

 

查看指定端口

netstat -ntulp |grep 30001

 

防火墙重新加载(开启之后重新加载)

firewall-cmd --reload

 

有哪些端口开放

firewall-cmd --zone=public --list-ports

 

安装telnet工具

yum -y install telnet.x86_64

 

删除node节点连接

kubeadm reset -f

 

查看dashboard的pod和服务状态

kubectl get po,svc -n kubernetes-dashboard

 

查看创建成功,查看所有po

# kubectl get po --all-namespaces

 

查看现有的所有服务

# kubectl get svc --all-namespaces

 

删除现有的dashboard服务

# kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard

 

# kubectl delete service dashboard-metrics-scraper --namespace=kubernetes-dashboard

 

删除现有的dashboard pod

# kubectl delete deployment kubernetes-dashboard --namespace=kubernetes-dashboard

 

# kubectl delete deployment dashboard-metrics-scraper --namespace=kubernetes-dashboard

 

查看dashboard pod的状态

kubectl get po -n kubernetes-dashboard

 

 

openssl req -days 3650 -new -out dashboard.csr -key dashboard.key -subj '/CN=10.66.103.98'

 

 

访问UI页面

#新建目录:

mkdir key && cd key

 

#生成证书

openssl genrsa -out dashboard.key 2048

 

#我这里写的自己的node1节点,因为我是通过nodeport访问的;如果通过apiserver访问,可以写成自己的master节点ip

openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=10.247.62.213'

openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt

 

#删除原有的证书secret

kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard

 

#创建新的证书secret

kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard

 

#查看pod

kubectl get pod -n kubernetes-dashboard

 

#重启pod

kubectl delete pod kubernetes-dashboard-7b5bf5d559-gn4ls  -n kubernetes-dashboard

 

获取UI登录 Token

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

 

标签:kubectl,kubernetes,--,admin,token,dashboard,Linux,K8S,亲测
来源: https://www.cnblogs.com/baibin-520/p/16534825.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有