现阶段在学习k8s,在这边将自己学习的知识做个总结。
首先没有在自己的机器上部署k8s集群,而是选择了play with kubernetes,线上的,不占用本机资源,而且相对于本机来说,线上的很容易部署。
一. 集群部署
1. 登录play with kubernetes
界面点击Login,这边给了两种登录账号选择,一个是github,一个是docker账号,我选择的是github。没有账号的记得提前注册一下。
【提一嘴⚠️】:我用以前的电脑,windows系统的,这个play with kubernetes的网站一直点不动,不知道是不是我原来电脑配置太低了…换了公司的电脑,嗯,很快…
通过账号授权之后,界面上就出现了start,点击进入界面(有一点慢)。
2. 添加实例
点击左边的ADD NEW INSTANCE之后,创建实例。可以在界面上看到也给出了部署集群的提示(参见我标红出来的语句)。
3. 初始化master节点
将刚刚创建的实例作为master节点,对其初始化,语句如下:
kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16
【注意⚠️】执行init 后会自动生成join命令。在初始化语句执行成功之后,可以在语句中看到一句 join语句,这个是后期别的实例加入到mater节点(node1)会使用的语句,可以复制备用,也可以不复制。若想再次看见该语句可以参见下面的第6条,而且每个人的join语句是不一样的。
4. 初始化集群网络
在master上部署网络代理,语句如下:
kubectl apply -n kube-system -f \ "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
5. 作为普通用户来使用集群
【⚠️】这个步骤不一定要有
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
6. 查看加入master的join指令
【⚠️】这边得到的结果与3中一样,为了获取其他node加入master节点的join语句。
kubeadm token create --print-join-command
7. 其他节点加入
【注意⚠️】这边每人这个语句不一样!!!
新增实例,在新增的实例命令行界面输入如下join语句:
kubeadm join 192.168.0.18:6443 --token woyq8i.hdinhrqwvzt5frou --discovery-token-ca-cert-hash sha256:56a68dd38ab3a85d2f28f900ef790e4be172a266c81e3755d951728b5d7e7424
创建4个实例,按照同样的方式加入master节点,形成集群。
8. 查看集群
在master(node1)上获取节点信息,语句如下:
kubectl get nodes
获取集群信息
kubectl cluster-info
二、部署nginx服务
1.在master节点部署nginx
每个nginx会自动被部署到node节点中。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx-app.yaml
2. master查看pod状态
默认是随机选择3个节点。
pod为Running状态表示部署成功,正常运行中。
kubectl get pods -o wide
3. 查看服务状态
kubectl get svc
可以看到"my-nginx-svc"服务已经启动,内部80端口被映射到了外部31447端口。
【⚠️】每人端口不一样的。
ss -anlp|grep 31447
输入以上命令,发现31447端口的确被监听,通过kube-proxy网络管理实现。
4. 开放端口
将pod上的80端口暴露给master节点。
kubectl expose deploy/my-nginx --port 80
5. 查看服务地址并访问
kubectl get svc my-nginx -o go-template --template '{{ .spec.clusterIP }}'
得到nginx的默认欢迎界面,至此在k8s上部署nginx完成。
⚠️ 新博客中写了在k8s集群中部署mysql,通过yaml文件进行资源的创建的,感兴趣的可以看一下~
链接:在k8s上部署mysql