- 正常安装Ubuntu 20.04 (目前CKA 考试使用的版本是Ubuntu 20.04) ,笔者为了快速一点,安装一台Ubuntu 20.04后,导出做成了ovf模板。模板中笔者开启了使用root账号登录,允许root远程登录。
-
导入之后如图
-
然后开机,3台虚拟机笔者设置的IP地址为 10.10.75.10/11/12,修改k8s-node1,k8s-node2 的IP地址
vi /etc/netplan/00-installer-config.yaml
:wq 保存好之后,netplan apply 应用一下(这个netplan 命令也是Ubuntu 20.04 新的命令)
同样方法修改好后保存退出后应用一下
用命令hostnamectl set-hostname 修改虚拟机主机名
-
这个时候,使用MobaXterm工具连接这3台虚拟机
接着点击上方这个按钮,开启多窗口模式
开启之后如图所示
虽然上面用命令更改了虚拟机主机名,笔者这边的会话窗口之前就连接了,所以导致3台主机都是root@k8s-master。关闭会话窗口后重新连接就会显示更改后的主机名了。
-
接下来修改machine-id,如果是通过虚拟机复制的方法创建另外2台虚拟机的,这个时候Ubuntu 会产生一个相同的 machine-id。虽然不知道这个 machine-id 冲突会造成什么影响 但是记得老师课上讲过 最好还是改一下
复制一下hostnamectl 然后点击右上角按钮,或者在其中一个窗口中输入,会同时发送到所有窗口中,然后按回车,所有窗口会同时执行
发现3台虚拟机的 machine id 相同
用命令rm -f /etc/machine-id 删除
然后用命令systemd-machine-id-setup 自动生成
最后用命令hostnamectl 查看3台虚拟机Machine ID不一样了
-
接着修改OS的源修改为阿里云
使用多窗口模式用命令vim /etc/apt/sources.list 修改列表,把系统默认的注释掉,然后末尾添加如下地址,添加好之后,:wq保存
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
然后用命令执行apt-get update,然后执行 apt-get upgrade
-
根据自己的实际环境修改东方瑞通 K8s实战特训营第01天k8sprep.sh脚本中的IP,修好之后用WinSCP上传到3台虚拟机的root目录下
-
多窗口模式同时执行命令 sh k8sprep.sh
执行完成
-
执行命令apt-get update
-
更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包apt-get install -y apt-transport-https ca-certificates curl
-
下载 Google Cloud 公开签名秘钥(阿里源)
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
添加 Kubernetes apt 仓库
https://developer.aliyun.com/mirror/kubernetes 阿里云官方配置方法
使用多窗口执行相同的命令
-
所有节点安装 kubelet、kubeadm、kubectl
做完这一步,可以退出多窗口模式了,剩下的基本在k8s-master主机上操作
-
初始化 k8s-master 节点(仅在 k8s-master 执 行)(做这一步要退出多窗口模式)
kubeadm config print init-defaults > init.yaml
用命令vim init.yaml 修改配置文件,修改好之后保存退出。网址:registry.aliyuncs.com/google_containers
-
使用 kubeadmin 初始化 k8s-master 节点
kubeadm init –config init.yaml | tee $HOME/k8s.txt
等待一会儿开始执行了
看到高亮成功字样,然后把这段都复制到txt文本中,等会到执行
节点初始化成功后,继续执行如下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
echo “export KUBECONFIG=/etc/kubernetes/admin.conf” >> /root/.bashrc
source /root/.bashrc
-
执行完成
-
部署 calico 网络(仅在 k8s-master 执行)
部署网络前查看集群状态,此时因为网络问题,状态均异常。
#查看 node 状态,可以看到此时 master 状态仍然为 NotReady
kubectl get node
#查看 pod 状态
kubectl get pods –namespace=kube-system
-
部署 calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
部署成功,有个告警,不影响。部署结束后等待一段时间,再查看 node 和 pod 状态,若正常则单节点k8s-master 安装成功。
再次用kubectl get node查看状态,状态从先前的NotReady变为Ready了。说明部署成功了。
kubectl get pods –namespace=kube-system
-
将其它节点加入 k8s-master 中组成集群
在 k8s-node1 和 k8s-node2 上分别运行初始化 k8smaster 之后的回显
kubeadm join 10.10.75.10:6443 –token abcdef.0123456789abcdef –discovery-token-ca-cert-hash sha256:c9640c38d244dd3ade91a6c07c7c810611e03685ce264841abb867ca5530969e
-
查看 Node 状态和 Pod 状态。(在 k8s-master 执行)
kubectl get node 说明加入成功
-
安装 Dashboard
编辑 /etc/hosts,添加如下映射关系
185.199.108.133 raw.githubusercontent.com
185.199.109.133 raw.githubusercontent.com
185.199.110.133 raw.githubusercontent.com
185.199.111.133 raw.githubusercontent.com
执行kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml
安装成功
kubectl get ns
kubectl get pod -n kubernetes-dashboard
kubectl get svc -n kubernetes-dashboard
-
修改为 NodePort 方式
kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard
修改成如图所示,nodePort是要增加的,type是Cluster IP 改成 NodePort
查看修改后的配置
-
使用 Token 登录 Dashboard
在浏览器输入地址:NodePort 端口可以用 master 或者 work 节点任 意一 IP+端口方式访问
获取 Token
kubectl -n kubernetes-dashboard get sa
kubectl -n kubernetes-dashboard get secrets
kubectl -n kubernetes-dashboard describe secrets kubernetes-dashboard-token-jbqgc
-
配置权限
验证默认在 Dashboard 中没有相关权限
设置权限绑定(针对所有命名空间)
kubectl create clusterrolebinding dashboardadmin –serviceaccount kubernetes-dashboard:kubernetes-dashboard –clusterrole cluster-admin
验证权限,可以访问任何资源
设置权限(针对某一命名空间)
kubectl create rolebinding defaultadmin –serviceaccount kubernetes-dashboard:kubernetes-dashboard –clusterrole cluster-admin