一、The hard way
二、在线play-with-k8s
1、浏览器访问 https://labs.play-with-k8s.com/ 并登陆(可用dockerhub账号直接登录),有4个小时的实践时间。
2、点击 +ADD NEW INSTANCE新增第一个实例
3、部署第一个节点
初始化master节点,执行:
[node1 ~]$ kubeadm init --apiserver-advertise-address $(hostname -i)
执行完毕后,记录下kubeadm join命令,后面会在其他节点上执行
4、部署其他2个节点
点击 +ADD NEW INSTANCE,继续新增2个实例
在这些实例中分别执行:
[node2 ~]$ kubeadm join 192.168.0.8:6443 --token 53x6g3.pbdsl4gvnpj22ifx \
--discovery-token-ca-cert-hash sha256:65cec51046d85c224ad56ede5480752515ab39d31a0675b307208c360a1bcf90
[node3 ~]$ kubeadm join 192.168.0.8:6443 --token 53x6g3.pbdsl4gvnpj22ifx \
--discovery-token-ca-cert-hash sha256:65cec51046d85c224ad56ede5480752515ab39d31a0675b307208c360a1bcf90
5、执行完毕后,在master节点上执行:
[node1 ~]$ kubectl get nodes 【看到三个节点已部署完成。】
此时节点的状态为NotReady,继续在master上部署网络代理:
[node1 ~]$ kubectl apply -n kube-system -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 |tr -d '\n')"
再次查看节点状态已经为Ready:
6、查询集群信息
[node1 ~]$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.0.8:6443
KubeDNS is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
7、部署nginx服务
在mater上执行:
[node1 ~]$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx-app.yaml
每个nginx会自动被部署到node节点中,默认是随机选择3个节点。查看pod状态:[node1 ~]$ kubectl get pods -o wide
pod为Running状态表示部署成功,正常运行中:
查看服务状态:[node1 ~]$ kubectl get svc
可以看到"my-nginx-svc"服务已经启动,内部80端口被映射到了外部30625端口:
[node1 ~]$ ss -anlp|grep 30628:30628端口的确被监听,通过kube-proxy网络管理实现:
8、开放端口,本机访问
将pod上的80端口暴漏给master节点:
[node1 ~]$ kubectl expose deploy/my-nginx --port 80
查看服务地址:[node1 ~]$ kubectl get svc my-nginx -o go-template --template '{{ .spec.clusterIP }}'
10.106.167.239
[node1 ~]$ curl 10.106.167.239
得到nginx的默认欢迎界面,至此在k8s上部署nginx完成。
三、Cloud上搭建
kops是云上搭建的解决方案,网址是:https://github.com/kubernetes/kops ,这个方案网上有很详细的说明,我就不搭建了,因为这玩意是云上方案,真要搞成生产级别的话很多组件是要收费的,所以对于我个人目前来说没什么意义;
四、企业级解决方案CoreOS
cireos是企业的解决方案,网址是:https://coreos.com/tectonic/ ,这个搭建方式也很简单,所以不做说明
五、使用Minikube搭建单节点K8s(需要kexue上网)
5.1、安装kubectl
官网:https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
1、在 Linux 上使用 curl 安装 kubectl 二进制文件
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
2、验证二进制文件(可选)下载 kubectl 校验和文件:
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
根据校验和文件验证 kubectl 二进制文件:
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
如果有效,则输出为:kubectl: OK;如果检查失败,
sha256
则以非零状态退出并打印类似于以下内容的输出:
kubectl: FAILED sha256sum: WARNING: 1 computed checksum did NOT match
注意:下载相同版本的二进制文件和校验和。
3、安装 kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
4、检查是否配置成功
kubectl version
5.2、安装minikube
1、下载
wget https://github.com/kubernetes/minikube/releases/download/v1.5.2/minikube-linux-amd64
2、配置环境变量
sudo mv minikube-linux-amd64 minikube && chmod +x minikube && mv minikube /usr/local/bin/
3、检查
minikube version
minikube start --vm-driver=none --image-repository=gcr.azk8s.cn/google- containers
6、感受一下Kubernetes
6.1、查看连接信息
kubectl config view
kubectl config get-contexts
kubectl cluster-info
6.2、体验Pod
resources/basic/pod_nginx.yaml
apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
kubectl apply -f pod_nginx.yaml
kubectl get pods
kubectl get pods -o wide
kubectl describe pod nginx
# kubectl进入
kubectl exec -it nginx bash
# 通过docker进入
minikube ssh
docker ps
docker exec -it containerid bash
# 若在minikube中,直接访问
# 若在物理主机上,要做端口转发
kubectl port-forward nginx 8080:80
kubectl delete -f pod_nginx.yaml