• Kubernetes搭建(二)


    一、The hard way

    Kelsey Hightower :https://github.com/kelseyhightower 这种方式搭建Kubernetes的环境方式可以说是最难的了。他的github中有一个kubernetes-the-hard-way,里面写了一个k8s比较困难的搭建方式,我是作为一个了解看了下,没真试过他的方式,有兴趣的可以自己玩

     二、在线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创建单节点的k8s
    minikube start --vm-driver=none --image-repository=gcr.azk8s.cn/google- containers

     6、感受一下Kubernetes

    也是下载安装kubectl和minikube,选择virtualbox,然后minikube start,就可以通过kubectl操作

    6.1、查看连接信息

    kubectl config view 
    kubectl config get-contexts
    kubectl cluster-info

    6.2、体验Pod

    (1)创建pod_nginx.yaml
    resources/basic/pod_nginx.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
    (2)根据pod_nginx.yaml文件创建pod
    kubectl apply -f pod_nginx.yaml
    (3)查看pod
    kubectl get pods 
    kubectl get pods -o wide
    kubectl describe pod nginx
    (4)进入nginx容器
    # kubectl进入 
    kubectl exec -it nginx bash
    # 通过docker进入
    minikube ssh
    docker ps
    docker exec -it containerid bash
    (5)访问nginx,端口转发
    # 若在minikube中,直接访问 
    # 若在物理主机上,要做端口转发
    kubectl port-forward nginx 8080:80
    (6)删除pod
    kubectl delete -f pod_nginx.yaml
    小结 :通过Minikube,使用kubectl操作单节点的K8S,而且也能感受到pod的创建和删除,包括pod中对应的容器
     
  • 相关阅读:
    hash_map和map的区别
    STL中map与hash_map容器的选择收藏
    ServletContextListener和ContextLoaderListener的区别
    解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile
    详解Tomcat线程池原理及参数释义
    Tomcat使用线程池配置高并发连接
    详解 Tomcat 的连接数与线程池
    ServletContextListener接口用法
    Spring Quartz定时任务如何获得ServletContext对象?
    如何在spring quartz类中拿到ServletContext
  • 原文地址:https://www.cnblogs.com/xing1/p/15802374.html
Copyright © 2020-2023  润新知