kubernetes 容器雲實驗

Kubernetes環境搭建

Rancher簡介

Rancher是一個開源的企業級容器管理平臺。通過Rancher,企業再也不必自己使用一系列的開源軟件去從頭搭建容器服務平臺。Rancher提供了在生產環境中使用的管理Docker和Kubernetes的全棧化容器部署與管理平臺。
Rancher由以下四個部分組成:

  • 基礎設施編排
  • 容器編排與調度
  • 應用商店
  • 企業及權限管理
    下圖展示了Rancher的主要組件和功能:
    在這裏插入圖片描述
    詳情可見Rancher文檔

Docker安裝

修改Docker安裝時的.json文件

vi /etc/docker/daemon.json 
{ 
 "registry-mirrors": ["https://dev.aliyun.com/search.html"] 
}

重啓docker

systemctl daemon-reload 
systemctl restart docker

安裝Rancher

Docker安裝並更新之後,就可以在Docker的Linux服務器上安裝Rancher,並指定開放端口等信息,進行基礎配置

docker run -d --name rancher-server -p 8080:8080 --restart=unless-stopped rancher/server:v1.6.14 && docker logs -f rancher-server

在這裏插入圖片描述

Kunbernetes安裝

Kubernetes(常簡稱爲K8s)是用於自動部署、擴展和管理“容器化(containerized)應用程序”的開源系統。[3]該系統由Google設計並捐贈給Cloud Native Computing Foundation(今屬Linux基金會)來使用。

它旨在提供“跨主機集羣的自動部署、擴展以及運行應用程序容器的平臺”。[4] 它支持一系列容器工具, 包括Docker等

環境配置
在這裏插入圖片描述
創建Kubernetes環境並添加主機

gRPC

gRPC 簡介

gRPC 是一個現代化高性能開源遠程過程調用(RPC)框架。CoreOS 的分佈式鍵值存儲 etcd 就使用了 gRPC 進行點對點通訊,Docker 的便攜式容器運行時 containerd 也通過 gRPC 暴露其功能,同時 containerd 本身也被捐獻給了 CNCF。在 gRPC 中可以使用 Protocol Buffers 來定義服務的接口,Protocol Buffers 是一個強大的二進制序列化工具和語言。gRPC 也和諸多語言進行了集成,並可以自動生成特定語言的客戶端和服務端接口。
在這裏插入圖片描述

環境配置安裝

安裝protobuf

安裝autoconf

wget http://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.gz \
&& tar -xzvf autoconf-2.65.tar.gz \
&& cd autoconf-2.65 \
&& ./configure –prefix=/usr/local
make && make install

安裝Protocol Buffers v3.11.2
執行下面的操作:

    ./configure --prefix=your_pb_install_path
    make 
    make install

設置環境變量

    go get -u github.com/golang/protobuf/proto
	go get -u github.com/golang/protobuf/protoc-gen-go

安裝gRPC-go

git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net
git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text 
git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto
cd $GOPATH/src/
go install google.golang.org/grpc

helloworld

運行測試

使用examples給出的helloworld,使用protoc命令生成相關文件

protoc --go_out=plugins=grpc:. helloworld.proto

這裏生成了對應的pb.go文件,使用plugins選項提供對grpc的支持、生成service的接口
分別打開兩個終端運行服務器和客戶端

go run greeter_server/main.go
go run greeter_client/main.go

服務器端運行結果

2019/12/26 19:02:26 Received: world

客戶端運行結果

2019/12/26 19:02:26 Greeting: Hello world

代碼

helloworld.proto

syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";

package helloworld;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

聲明瞭服務SayHello,請求的參數信息HelloRequest,返回的信息HelloReply。利用.proto文件定義gRPC服務,通過 protoc 編譯器生成 .pb.go 文件。
服務器端

package main

import (
	"context"
	"log"
	"net"

	"google.golang.org/grpc"
	pb "google.golang.org/grpc/examples/helloworld/helloworld"
	"google.golang.org/grpc/reflection"
)

const (
	port = ":50051"
)

// server is used to implement helloworld.GreeterServer.
type server struct{}

// SayHello implements helloworld.GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
	log.Printf("Received: %v", in.Name)
	return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}

func main() {
	lis, err := net.Listen("tcp", port)
	if err != nil {
		log.Fatalf("failed to listen: %v", err)
	}
	s := grpc.NewServer()
	pb.RegisterGreeterServer(s, &server{})
	// Register reflection service on gRPC server.
	reflection.Register(s)
	if err := s.Serve(lis); err != nil {
		log.Fatalf("failed to serve: %v", err)
	}
}

客戶端

package main

import (
	"context"
	"log"
	"os"
	"time"

	"google.golang.org/grpc"
	pb "google.golang.org/grpc/examples/helloworld/helloworld"
)

const (
	address     = "localhost:50051"
	defaultName = "world"
)

func main() {
	// Set up a connection to the server.
	conn, err := grpc.Dial(address, grpc.WithInsecure())
	if err != nil {
		log.Fatalf("did not connect: %v", err)
	}
	defer conn.Close()
	c := pb.NewGreeterClient(conn)

	// Contact the server and print out its response.
	name := defaultName
	if len(os.Args) > 1 {
		name = os.Args[1]
	}
	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
	defer cancel()
	r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})
	if err != nil {
		log.Fatalf("could not greet: %v", err)
	}
	log.Printf("Greeting: %s", r.Message)
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章