DigitalOcean资源来自GitHub学生包,顺便安利→[GitHub-学生资源]
非学生用户可尝试邀请链接,可获得$100有效期60天,玩一次K8S耍耍:m.do.co/c/beff865d1…
tip: 要用信用卡或PayPal先充个$5才能激活赠送的$100
DigitalOcean简介
DigitalOcean也是一款云服务的供应商,目前提供功能
- Droplets 类似阿里云的云服务器ECS
- Kubernetes 大名鼎鼎的K8S
- Volumes 块存储卷,用于增加服务器存储
- Databases 数据库
- Spaces 对象存储
- Images 镜像
- Networking 网络
- Monitoring 监控
- API
目前自己玩linux服务器推荐Droplets,支持位置大都为国外的,在一些开发包的下载和Docker镜像拉取的时候可以轻松一点,省得改配置
手动搭建
1. 创建项目
如图左侧选择New Project,填好项目名称和介绍并选择使用目的,这里做手动搭建K8S练习故选了Educational purposes 创建成功,资源移动如果没有的话可以选择skip跳过 OK跳转到项目页面,接下来来搞Droplet服务器2. Droplet
由于要求为手动搭建并且有不同的内存需求,这里分两次来创建Droplets
2.1 master
系统
一台作为master的机子,系统要求CentOS 7,故选择CentOS,然后选择版本,默认为7.6 x64,妥
内存
要求至少3G
如果要多CPU的话可以选更后面的,不过价格请自行平衡(当然有送$100的朋友可以不考虑这个问题backups和block storage目前没有要求,先跳过
地域和附加选项
请选择访问速度比较快的(可以先等搭建完成之后去ping,速度慢的话销毁掉再换一台,也可以网上找测速网)
一般推荐NewYork、SanFrancisco或Singapore
附件选项推荐开启私有网络(内网)、ipv6和监控,内网也能方便后续环境的配置
SSH和服务器名
SSH考虑安全性可以使用,自行选择
名称本台机子推荐包含master,到时候区分master和node方便一些,tags自选,项目就选择刚刚创建的名称,这里使用的K8S
OK, Create
创建完成会受到邮件提示
此处会包含服务器ip、用户名密码,请使用XShell等工具进行连接,第一次连接会要求修改密码,后面就可以正常使用了
Node
其他配置基本相同,只是Plan中可选择2G内存减小开支
特别提醒,请先测试master的连通性和访问速度正常再创建node,尽量选择相同的地域配置减少访问延迟
名称使用node来区别,数量选择2(名称后面搭建的时候改成了node1和node2,若有出入可通过hostnamectl set-hostname nodeNumber
对应修改每台服务器名)
OK, Create
至此,3台基础的服务器就开起来了连接也测试完毕,推荐使用XShell存个收藏,方便使用
环境搭建
Docker && Git
先搭建Docker和Git:juejin.im/post/5cac06…
添加hosts
先记录下几台机子的ip(推荐使用内网环境),添加hosts
cat >> /etc/hosts <<EOF
10.138.230.86 master master
10.138.150.111 node1 node1
10.138.230.128 node2 node2
EOF
复制代码
useradd –m docker
ssh-keygen -t rsa
ssh-copy-id root@master
ssh-copy-id root@node1
ssh-copy-id root@node2
复制代码
部署过程有点复杂不好记录啊orz
五一爆肝,总算搭起来了,先报个平安orz
以下为使用DigitalOcean的K8S服务,可以直接获得k8s的nodes(未完,待补充)
DO-Kubernetes初试
简介
把K8S做成云服务器集群服务,当成DO平台的一款服务来租赁使用,免去自己购买服务器配置集群的不便
自动部署 (暂缓)
1. Create a cluster 创建集群
1.1 Select a Kubernetes version 选择K8S版本
选了个新版
- 1.13.5-do.1
- 1.12.7-do.1
- 1.11.9-do.1
1.2 Choose a datacenter region 选择数据中心地域
- 自行参考测速报告,挑个自己访问延迟低的(可以多次尝试,速度不行就delete,按服务器运行时间算开销的)
- 服务器地域可能有unavailable的,请选择其他可用的地域
- New York 1 / 2 / 3
- Amsterdam 1 / 2 / 3
- San Francisco 1 / 2
- Singapore 1
- London 1
- Frankfurt 1
- Toronto 1
- Bangalore 1
1.3 Add node pool(s) 添加结点池
结点配置可灵活调整,个人学习用就挑最便宜的了(有$100的可以选择高配挥霍一下:D)
- Standard nodes: Balanced with a healthy amount of memory
- $10/Month per node ($0.015/hr): 2 GB Memory / 1 vCPU
- $20/Month per node ($0.030/hr): 4 GB Memory / 2 vCPUs
- Flexible nodes: Plans with the same price and varying resources
- $15/Month per node ($0.022/hr): 1 GB Memory / 3 vCPUs
- $15/Month per node ($0.022/hr): 2 GB Memory / 2 vCPUs
- $15/Month per node ($0.022/hr): 3 GB Memory / 1 vCPU
毕竟是集群,好歹搞个3个结点玩玩:3 Nodes
有条件的话还可以试试添加多个结点池orz
1.4 Add Tags 给集群添加标签
相当于给集群分个组,便于管理
1.5 Choose a name 给集群命名
默认命名会自动组合版本和地域,加上一串自动生成的数字ID,格式参考:k8s-1-13-5-do-1-sfo2-xxxxxxxxxxxxx
Create Cluster
去吧K8S! ( 咳咳,为避免消耗太多还是等课程开讲了再点确定吧orz )
以下内容可以照着DO的教程走,这里仅作记录
0. 找一台服务器,创建工作目录(这里使用的是DO-CentOS-SFO2)
mkdir ~/.kube
cd ~/.kube
复制代码
1. CentOS 安装kubectl
如选择了其他版本的系统请查看官方的安装文档:kubernetes.io/docs/tasks/…
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubectl
复制代码
2. 下载配置文件并传输到工作目录
> 使用XShell的话推荐`yum install -y lrzsz`之后直接鼠标拖入即可
复制代码
3. 测试连接
kubectl --kubeconfig="(Your Config File).yaml" get nodes
复制代码
若返回结点信息即说明连接成功:
NAME STATUS ROLES AGE VERSION
pool-6wma2****-qbr8 Ready <none> 12m v1.13.5
pool-6wma2****-qbrc Ready <none> 12m v1.13.5
pool-6wma2****-qbru Ready <none> 12m v1.13.5
复制代码
4. 部署Workload
添加文件及内容并丢入vim nginx.yaml
,name和app名可自行修改
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: library/nginx
复制代码
以之前的配置文件来执行指定文件的create操作
kubectl --kubeconfig="(Your Config File).yaml" create -f ./nginx.yaml
复制代码
返回deployment.apps/nginx created
即操作成功
同理
[root@centos-s-1vcpu-1gb-sfo2-01 .kube]# vim cronjob.yaml
[root@centos-s-1vcpu-1gb-sfo2-01 .kube]# vim pod.yaml
[root@centos-s-1vcpu-1gb-sfo2-01 .kube]# vim replicaSet.yaml
[root@centos-s-1vcpu-1gb-sfo2-01 .kube]# kubectl --kubeconfig="(Your Config File).yaml" create -f ./cronjob.yaml
cronjob.batch/cronjob-example created
[root@centos-s-1vcpu-1gb-sfo2-01 .kube]# kubectl --kubeconfig="(Your Config File).yaml" create -f ./pod.yaml
pod/nginx-pod-example created
[root@centos-s-1vcpu-1gb-sfo2-01 .kube]# kubectl --kubeconfig="(Your Config File).yaml" create -f ./replicaSet.yaml
replicaset.apps/nginx-replicaset-example created
复制代码
cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob-example
spec:
schedule: '*/5 * * * *'
jobTemplate:
spec:
template:
spec:
containers:
- name: cronjob-example
image: busybox
args:
- /bin/sh
- '-c'
- echo This is an example cronjob running every five minutes
restartPolicy: OnFailure
复制代码
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-example
spec:
containers:
- name: nginx-pod-example
image: library/nginx
复制代码
replicaSet.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset-example
spec:
replicas: 1
selector:
matchLabels:
app: nginx-replicaset-example
template:
metadata:
labels:
app: nginx-replicaset-example
spec:
containers:
- name: nginx-replicaset-example
image: library/nginx
复制代码
然后就得自己看文档了: kubernetes.io/docs/tasks/…
尝试运行Nginx
[root@centos-s-1vcpu-1gb-sfo2-01 .kube]# kubectl --kubeconfig="(Your Config File).yaml" describe deployment nginx
Name: nginx
Namespace: default
CreationTimestamp: Mon, 29 Apr 2019 02:31:18 +0000
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=nginx
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: library/nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-5fd59fd4f (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 15m deployment-controller Scaled up replica set nginx-5fd59fd4f to 1
复制代码
查看运行状态
[root@centos-s-1vcpu-1gb-sfo2-01 .kube]# kubectl --kubeconfig="(Your Config File).yaml" get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-5fd59fd4f-nm8nd 1/1 Running 0 17m
复制代码
[root@centos-s-1vcpu-1gb-sfo2-01 .kube]# kubectl --kubeconfig="(Your Config File).yaml" get pods -o wide|grep nginx
nginx-5fd59fd4f-nm8nd 1/1 Running 0 30m 10.244.2.47 pool-6wma2j9kg-qbr8 <none> <none>
nginx-deployment-example-5b7b75dc46-6xn8s 1/1 Running 0 55m 10.244.1.36 pool-6wma2j9kg-qbrc <none> <none>
nginx-pod-example 1/1 Running 0 21m 10.244.1.250 pool-6wma2j9kg-qbrc <none> <none>
nginx-replicaset-example-qxdpj 1/1 Running 0 21m 10.244.2.128 pool-6wma2j9kg-qbr8 <none> <none>
复制代码