Làm thế nào để cài đặt và cấu hình Kubernetes trên đầu trang của một cụm sao CoreOS

Giới thiệu
Kubernetes một hệ thống được thiết kế để quản lý các ứng dụng được xây dựng trong vòng Docker container trên nhóm môi trường. xử lý toàn bộ vòng đời của một ứng dụng container bao gồm việc triển khai mở rộng quy mô.
Trong hướng dẫn này, chúng tôi sẽ chứng minh làm thế nào để bắt đầu với Kubernetes trên một cụm CoreOS. Hệ thống này sẽ cho phép chúng tôi nhóm các dịch vụ liên quan với nhau cho việc triển khai như một đơn vị trên một máy chủ duy nhất bằng cách sử dụng Kubernetes những gì gọi“vỏ”. cũng cung cấp sức khỏe kiểm tra chức năng, tính sẵn sàng cao hiệu quả sử dụng nguồn tài nguyên.
Điều kiện tiên quyết mục tiêu
Chúng tôi sẽ bắt đầu với các cụm CoreOS cơ bản cùng chúng tôi đã sử dụng trong trước CoreOS hướng dẫn. Để có được này cụm ba thành viên chạy, hãy làm theo hướng dẫn kết cụm CoreOS của chúng tôi.
Điều này sẽ cung cấp cho bạn ba máy chủ cấu hình. Trong khi mỗi nút hoán đổi cho nhau về cơ bản mức CoreOS, trong Kubernetes, chúng tôi sẽ cần phải gán vai trò chuyên biệt hơn. Chúng ta cần một nút để hoạt động như các bậc thầy, điều này sẽ chạy một vài dịch vụ bổ sung, chẳng hạn như một DIAPI server một người quản lý điều khiển.
Hướng dẫn này, chúng tôi sẽ sử dụng các chi tiết sau đây:
Tên máy chủ khu vực IPv4 riêng IPv4 vai trò
coreos-1 192.168.2.1 10.120.0.1 Thạc sĩ
coreos-2 192.168.2.2 10.120.0.2 Minion1
coreos-3 192.168.2.3 10.120.0.3 Minion2
Trong cấu hình chúng tôi sẽ sau, thầy cũng sẽ một máy chủ đầy đủ chức năng minion có khả năng hoàn thành công việc. Ý tưởng cho cấu hình này được lấy từ Brian Ketelson hướng dẫn về cách thiết lập Kubernetes trên CoreOS ở đây.
Nếu bạn theo hướng dẫn ở trên để tạo ra cụm, etcd hạm đội nên được cấu hình để sử dụng mỗi máy chủ riêng IPv4 để giao tiếp. Địa chỉ IP công cộng có thể được sử dụng để kết nối từ máy tính địa phương của bạn.
Hướng dẫn này sẽ đưa cụm sao này CoreOS cơ bản cài đặt một số các dịch vụ trên đầu trang của .
Trước tiên, chúng tôi sẽ đặt cấu hình flannel, một lớp vải mạng cung cấp mỗi máy với một mạng con cá nhân cho container giao tiếp. Đây một dự án CoreOS tương đối mới được thực hiện trong một phần lớn để thích ứng với Kubernetes giả định về môi trường mạng.
Chúng tôi sẽ đặt cấu hình Docker sử dụng lớp mạng này cho các triển khai. Ngày đầu này, chúng tôi sẽ thiết lập Kubernetes. Điều này bao gồm một số miếng. Chúng ta cần phải cấu hình một dịch vụ proxying, một lớp API, một hệ thống quản lý cấp nút “pod” được gọi là Kubelet.
Tạo lớp vải Flannel mạng
Lần đầu tiên chúng ta cần làm cấu hình dịch vụ flannel. Đây phần cung cấp cá nhân mạng con cho mỗi máy tính trong cụm sao. Docker sẽ được cấu hình để sử dụng này cho các triển khai. Do đây một yêu cầu cơ bản, một nơi tuyệt vời để bắt đầu.
Tại thời điểm này bằng văn bản, không không có những chương trình được xây dựng trước của flannel cung cấp bởi dự án. Do thực tế này, chúng tôi sẽ cần phải xây dựng nhị phân cài đặt bản thân. Để tiết kiệm thời gian xây dựng, chúng tôi sẽ được xây dựng này trên một máy tính duy nhất sau đó sau đó chuyển tập tin thực thi để các nút khác của chúng tôi.
Giống như nhiều nơi CoreOS, Flannel được xây dựng trong ngôn ngữ lập trình đi. Chứ không phải là thiết lập một môi trường hoàn toàn đi để xây dựng các gói phần mềm, chúng tôi sẽ sử dụng một container pre-xây dựng cho mục đích này. Google duy trì một container đi đặc biệt cho các loại tình huống.
Tất cả các ứng dụngchúng tôi sẽ cài đặt sẽ được đặt trong thư mục /opt/bin, không được tạo ra tự động trong CoreOS. Tạo thư mục bây giờ:
sudo mkdir -p/opt/bin
Bây giờ chúng ta có thể xây dựng dự án sử dụng container đi. Chỉ cần chạy lệnh này Docker để kéo hình ảnh từ Docker Hub, chạy các thùng chứa, tải về xây dựng các gói phần mềm bên trong container:
docker chạy -i -t google/golang/bin/bash -c “Hãy lấy github.com/coreos/flannel”
Khi chiến dịch hoàn tất, chúng tôi có thể sao chép nhị phân biên soạn ra khỏi các thùng chứa. Trước tiên, chúng ta cần phải biết container ID:
docker ps -l – q
Kết quả sẽ ID trông như thế này:
004e7a7e4b70
Chúng tôi có thể dùng ID này để chỉ định một hoạt động sao chép vào thư mục /opt/bin. Nhị phân đã được đặt tại /gopath/bin/flannel trong các thùng chứa. Kể từ khi thư mục /opt/bin không phải là có thể ghi bởi người sử dụng lõi của chúng tôi, chúng tôi sẽ cần phải sử dụng sudo:
sudo docker cp 004e7a7e4b70: / gopath/bin/flannel/opt/bin /
Chúng tôi bây giờ flannel có sẵn trên máy đầu tiên của chúng tôi. Một chút sau đó, chúng tôi sẽ sao chép điều này với các máy khác của chúng tôi.
Xây dựng những chương trình Kubernetes
Kubernetes bao gồm khá một vài ứng dụng khác nhau lớp công nghệ. Hiện nay, các dự án không chứa những chương trình trước được xây dựng cho các thành phần khác nhau, chúng tôi cần. Chúng tôi sẽ xây dựng chúng mình thay vào đó.
Chúng tôi chỉ sẽ hoàn tất quá trình này trên một trong các máy chủ. Kể từ khi máy chủ của chúng tôi được thống nhất trong tự nhiên, chúng tôi có thể tránh không cần thiết xây dựng lần bằng cách chỉ đơn giản là chuyển giao những chương trình chúng tôi sẽ sản xuất.
Bước đầu tiên để sao chép dự án từ kho GitHub. Chúng tôi sẽ sao chép vào thư mục nhà của chúng tôi:
CD ~
git clone https://github.com/GoogleCloudPlatform/kubernetes.git
Tiếp theo, chúng tôi sẽ đi vào xây dựng thư mục trong kho. Từ đây, chúng tôi có thể xây dựng những chương trình bằng cách sử dụng một kịch bản bao gồm:
CD kubernetes/xây dựng
./Make-binaries.sh
Quá trình này sẽ mất khá nhiều thời gian. sẽ khởi động một container Docker để xây dựng các gói nhị phân cần thiết.
Khi quá trình xây dựng được hoàn thành, bạn sẽ thể tìm thấy các tập tin nhị phân trong thư mục ~/kubernetes/_output/build/linux/amd64:
CD ~/kubernetes/_output/build/linux/amd64
ls
apiserver quản lý điều khiển kubecfg kubelet proxy trình lập lịch biểu
Chúng tôi sẽ chuyển chúng vào thư mục /opt/bin chúng tôi tạo ra trước đó:
sudo cp * / opt/bin
Máy đầu tiên của chúng tôi bây giờ tất cả những chương trình cần thiết cho dự án của chúng tôi. Chúng tôi bây giờ có thể tập trung vào nhận được các ứng dụng trên các máy chủ khác.
Thực thi sang máy chủ khác của bạn
Máy đầu tiên của chúng tôi tất cả các thành phần cần thiết để khởi động một cụm Kubernetes. Chúng tôi cần phải sao chép các máy của chúng tôi khác mặc dù trước khi điều này sẽ làm việc.
Kubernetes không phảimột cài đặt thống nhất (đó một Thạc sĩ nhiều tay sai), mỗi máy chủ không cần tất cả các tập tin nhị phân. Mỗi máy chủ minion chỉ cần proxy, kubelet flannel thực thi.
Tuy nhiên, chuyển giao tất cả các file thực thi cho chúng ta linh hoạt hơn xuống đường. cũng dễ dàng hơn. Chúng tôi sẽ chuyển tất cả mọi thứ trong hướng dẫn này.
Khi bạn kết nối với máy tính đầu tiên của bạn, bạn nên chuyển tiếp thông tin đại lý SSH của bạn bằng cách kết nối với cờ – một (sau khi bắt đầu các đại lý thêm khóa của bạn). Đây một bước quan trọng. Ngắt kết nối kết nối lại nếu bạn đã không vượt qua lá cờ này trước đó.
Bắt đầu bằng cách di chuyển vào thư mục nơi mà chúng tôi đã đặt những chương trình của chúng tôi:
CD/opt/bin
Bây giờ, chúng tôi có thể sao chép các tập tin trong thư mục này để chúng tôi máy chủ khác. Chúng tôi sẽ làm điều này bằng tarring thực thi trực tiếp để chúng tôi vỏ ra tiêu chuẩn. Chúng tôi sẽ sau đó ống này vào chúng tôi lệnh SSH nơi chúng tôi sẽ kết nối với một trong các máy chủ khác của chúng tôi.
Lệnh SSH, chúng tôi sẽ sử dụng sẽ tạo/opt/bin thư mục trên các máy chủ khác của chúng tôi, thay đổi vào thư mục, tar thông tin nhận được qua đường hầm SSH. Quyền chỉ huy toàn bộ trông như thế này:
Tar – czf . | SSH core@192.168.2.2 “sudo mkdir -p/opt/bin; CD/opt/bin; sudo tar xzvf-“
Điều này sẽ chuyển tất cả các file thực thi để địa chỉ IP bạn chỉ định. Chạy lệnh một lần nữa bằng cách sử dụng máy chủ lưu trữ thứ ba:
Tar – czf . | SSH core@192.168.2.3 “sudo mkdir -p/opt/bin; CD/opt/bin; sudo tar xzvf-“
Bây giờ bạn tất cả các file thực thi tại chỗ trên của bạn máy ba.
Thiết lập dịch vụ dành riêng cho Master
Bước tiếp theo để thiết lập các tập tin đơn vị systemd một cách chính xác cấu hình khởi chạy các ứng dụng mới. Chúng tôi sẽ bắt đầu bằng cách xử lý các ứng dụng sẽ chỉ chạy trên máy chủ tổng thể của chúng tôi.
Chúng tôi sẽ định vị những tập tin trong thư mục /etc/systemd/system. Di chuyển bây giờ:
CD /etc/systemd/system
Bây giờ chúng tôi có thể bắt đầu xây dựng các tập tin dịch vụ.
Tạo tập tin đơn vị DIAPI Server
Tập đầu tiên chúng tôi sẽ đặt cấu hình máy chủ API đơn vị tập tin. DIAPI server được sử dụng để phục vụ các thông tin về cụm, xử lý đăng bài yêu cầu để thay đổi thông tin, lịch trình công việc trên mỗi máy chủ, đồng bộ hóa thông tin được chia sẻ.
Chúng tôi sẽ kêu gọi này đơn vị tập tin apiserver.service cho đơn giản. Tạo ra mở tập tin đó bây giờ:
sudo vim apiserver.service
Trong tập tin này, chúng tôi sẽ bắt đầu với các siêu dữ liệu cơ bản về dịch vụ của chúng tôi. Chúng ta cần phải đảm bảo rằng đơn vị này không được khởi động cho đến etcd dịch vụ Docker lập hoạt động:
[Đơn vị]
Mô tả = Kubernetes DIAPI Server
After=etcd.Service
After=docker.Service
Wants=etcd.Service
Wants=docker.Service
Tiếp theo, chúng tôi sẽ hoàn thành phần [dịch vụ]. Điều này chủ yếu là sẽ được sử dụng để bắt đầu máy chủ API với một số thông số mô tả môi trường của chúng tôi. Chúng tôi cũng sẽ thiết lập điều kiện khởi động lại:
[Đơn vị]
Mô tả = Kubernetes DIAPI Server
After=etcd.Service
After=docker.Service
Wants=etcd.Service
Wants=docker.Service
[Dịch vụ]
ExecStart = / opt/bin/apiserver được viết bởi admin
-địa chỉ = 127.0.0.1 \
-cổng = 8080 \
-etcd_servers = http://127.0.0.1:4001 được viết bởi admin
-Máy = 10.120.0.1, 10.120.0.2, 10.120.0.3 được viết bởi admin
-logtostderr = true
ExecStartPost =- / bin/bash – c “cho đến khi /usr/bin/curl http://127.0.0.1:8080; echo \”waiting cho DIAPI server tới online…\”; ngủ 3; thực hiện”
Khởi động lại = ngày thất bại
RestartSec = 5
Phần trên thiết lập địa chỉ mạng cổng nơi mà các máy chủ sẽ chạy, cũng như các vị trí nơi etcd đang lắng nghe. Chúng tôi cũng đã thông qua trong một danh sách các máy nơi Kubernetes có thể lịch trình công việc. Ở đây, chúng tôi đã thông qua tại mỗi địa chỉ IP riêng máy của chúng tôi, cách nhau bằng dấu phẩy. Sửa đổi các giá trị này để phản ánh cấu hình của riêng bạn.
Sau khi chúng tôi bắt đầu dịch vụ, chúng tôi kiểm tra rằng chạy trong một vòng lặp. Điều này đảm bảo rằng các dịch vụ thực sự có thể chấp nhận kết nối trước khi các dịch vụ phụ thuộc được bắt đầu. Không điều này có thể dẫn đến sai sót trong các dịch vụ phụ thuộc nào yêu cầu khởi động lại hướng dẫn sử dụng.
Cuối cùng, chúng tôi sẽ để cài đặt các đơn vị này. Chúng tôi có thể làm điều đó với một phần [cài đặt] sẽ cho biết máy chủ của chúng tôi để bắt đầu dịch vụ này khi máy tính hoàn toàn khởi động:
[Đơn vị]
Mô tả = Kubernetes DIAPI Server
After=etcd.Service
After=docker.Service
Wants=etcd.Service
Wants=docker.Service
[Dịch vụ]
ExecStart = / opt/bin/apiserver được viết bởi admin
-địa chỉ = 127.0.0.1 \
-cổng = 8080 \
-etcd_servers = http://127.0.0.1:4001 được viết bởi admin
-Máy = 10.120.0.1, 10.120.0.2, 10.120.0.3 được viết bởi admin
-logtostderr = true
ExecStartPost =- / bin/bash – c “cho đến khi /usr/bin/curl http://127.0.0.1:8080; echo \”waiting cho DIAPI server tới online…\”; ngủ 3; thực hiện”
Khởi động lại = ngày thất bại
RestartSec = 5
[Cài đặt]
WantedBy = multi-user.target
Khi bạn hoàn tất, hãy đóng tệp.
Tạo tệp đơn vị điều khiển quản lý
Các mảnh tiếp theo yêu cầu của các Kubernetes các máy chủ điều khiển quản lý. Thành phần này được sử dụng để thực hiện sao chép dữ liệu giữa các đơn vị cụm.
Mở ra một tập tin gọi là điều khiển-manager.service trong cùng thư mục:
sudo vim điều khiển-manager.service
Chúng tôi sẽ bắt đầu với các siêu dữ liệu cơ bản một lần nữa. Điều này sẽ làm theo định dạng tương tự như các tập tin qua. Ngoài các phụ thuộc khác, Dịch vụ này phải khởi động sau khi các đơn vị máy chủ API chúng tôi chỉ cần cấu hình:
[Đơn vị]
Mô tả = Kubernetes bộ điều khiển quản lý
After=etcd.Service
After=docker.Service
After=apiserver.Service
Wants=etcd.Service
Wants=docker.Service
Wants=apiserver.Service
Đối với phần [dịch vụ] của tập tin này, chúng tôi chỉ cần gửi một vài tham số cho tập tin thực thi. Chủ yếu là, chúng tôi chỉ các ứng dụng để vị trí của server API của chúng tôi. Bạn sẽ không cần phải sửa đổi bất kỳ các giá trị này. Một lần nữa, chúng tôi sẽ chắc chắn đơn vị này khởi động lại về thất bại cần thiết cho chúng tôi Kubernetes cụm để hoạt động tốt:
[Đơn vị]
Mô tả = Kubernet
Các thành phần tiếp theo máy chủ tổng thể cần để chạy trình lập lịch biểu. Trình lập lịch biểu quyết minion chạy khối lượng công việc trên giao tiếp để đảm bảo rằng điều này xảy ra.
Tạo ra mở tập tin một đơn vị này bây giờ:
sudo vim scheduler.service
Đơn vị này bắt đầu giảm giá trong phần lớn theo cùng một cách như là cuối cùng. Đô thị này phụ thuộc vào tất cả các dịch vụ giống nhau:
[Đơn vị]
Mô tả = Kubernetes Scheduler
After=etcd.Service
After=docker.Service
After=apiserver.Service
Wants=etcd.Service
Wants=docker.Service
Wants=apiserver.Service
Phần dịch vụ chính nó rất thẳng về phía trước. Chúng ta chỉ cần điểm tập tin thực thi tại địa chỉ mạng cổng DIAPI server nằm trên. Một lần nữa, chúng tôi sẽ khởi động lại dịch vụ trong trường hợp thất bại.
Phần cài đặt gương những người khác chúng tôi đã thấy cho đến nay:
[Đơn vị]
Mô tả = Kubernetes Scheduler
After=etcd.Service
After=docker.Service
After=apiserver.Service
Wants=etcd.Service
Wants=docker.Service
Wants=apiserver.Service
[Dịch vụ]
ExecStart = / opt/bin/lập lịch-tổng thể = 127.0.0.1:8080
Khởi động lại = ngày thất bại
RestartSec = 5
[Cài đặt]
WantedBy = multi-user.target
Khi bạn hoàn tất, lưu đóng tập tin.
Thiết lập dịch vụ cụm
Bây giờ chúng tôi các dịch vụ dành riêng cho tổng thể cấu hình, chúng tôi có thể cấu hình các tập tin đơn vị cần phải mặt trên tất cả các máy của chúng tôi. Điều này có nghĩa rằng bạn nên thêm các tệp vào bậc thầy máy chủ thương yêu cấu hình chúng cho phù hợp.
Tạo tập tin đơn vị Flannel
Các thành phần đầu tiên chúng tôi cần để có được chạy flannel, lớp vải mạng của chúng tôi. Điều này sẽ được sử dụng để cung cấp cho mỗi nút mạng con riêng của mình cho Docker container.
Một lần nữa, trên mỗi máy của bạn, thay đổi vào thư mục cấu hình systemd:
CD /etc/systemd/system
Tạo mở các tập tin đơn vị flannel trong trình soạn thảo văn bản của bạn:
sudo vim flannel.service
Bên trong của tập tin này, chúng tôi sẽ bắt đầu với thông tin siêu dữ liệu. Kể từ khi dịch vụ này yêu cầu etcd để đăng ký thông tin mạng con, cần phải bắt đầu điều này sau khi etcd:
[Đơn vị]
Mô tả = Flannel mạng vải cho CoreOS
Requires=etcd.Service
After=etcd.Service
Cho phần [dịch vụ], trước tiên chúng ta sẽ để nguồn /etc/environment tập tin như vậy chúng tôi có thể quyền truy cập vào địa chỉ IP riêng của máy chủ của chúng tôi.
Bước tiếp theo sẽ để đặt một ExecStartPre = dòng cố gắng để đăng ký loạt các mạng con với etcd. sẽ liên tục cố gắng để đăng ký với etcd cho đến khi thành công. Chúng tôi sẽ sử dụng dãy 10.100.0.0/16 cho hướng dẫn này.
Sau đó, chúng tôi sẽ bắt đầu flannel với địa chỉ IP riêng của chúng tôi đang tìm nguồn cung ứng từ các tập tin môi trường.
Sau đó, chúng tôi muốn kiểm tra cho dù flannel đã viết thông tin của nó vào tập tin (do đó Docker đó có thể đọc trong một thời điểm) ngủ của nó nếu đã không. Điều này đảm bảo rằng dịch vụ Docker không cố gắng để đọc tập tin trước khi sẵn (điều này có thể xảy ra trên máy chủ đầu tiên tới trực tuyến). Chúng tôi sẽ đặt cấu hình khởi động lại bằng cách sử dụng các tham số thông thường cài đặt các đơn vị sử dụng đa-user.target một lần nữa:
[Đơn vị]
Mô tả = Flannel mạng vải cho CoreOS
Requires=etcd.Service
After=etcd.Service
[Dịch vụ]
EnvironmentFile = / etc/môi trường
ExecStartPre =- / bin/bash – c “cho đến khi /usr/bin/etcdctl đặt /coreos.com/network/config ‘ {\”Network\ “: \”10.100.0.0/16\ “}’; echo \”waiting cho etcd để trở thành available…\”; ngủ 5; thực hiện”
ExecStart = / opt/bin/flannel – iface = ${COREOS_PRIVATE_IPV4}
ExecStartPost =- / bin/bash – c “cho đến khi [-e /run/flannel/subnet.env]; echo \”waiting cho viết. \”; ngủ 3; thực hiện”
Khởi động lại = ngày thất bại
RestartSec = 5
[Cài đặt]
WantedBy = multi-user.target
Lưu đóng tập tin khi bạn đã kết thúc. Tạo ra cùng một tập tin trên của bạn máy chủ khác.
Tạo tập tin đơn vị Docker
Các tập tin tiếp theo chúng tôi sẽ tạo ra không thực sự liên quan để thực thi trong thư mục /opt/bin của chúng tôi. Chúng tôi cần để tạo ra một tập tin dịch vụ Docker để dịch vụ sẽ được bắt đầu với kiến thức của lớp phủ mạng flannel chúng tôi chỉ cần đặt cấu hình.
Tạo tập tin đơn vị phù hợp với văn bản của bạn biên tập:
sudo vim docker.service
Bắt đầu với các siêu dữ liệu thông thường. Chúng tôi cần điều này để bắt đầu sau khi dịch vụ flannel đã được cấu hình đưa trực tuyến:
[Đơn vị]
Mô tả = Docker thùng chứa động cơ cấu hình để chạy với flannel
Requires=flannel.Service
After=flannel.Service
Cho phần [dịch vụ], chúng tôi sẽ cần nguồn tập tin flannel sử dụng để lưu trữ các biến môi trường tạo ra. Điều này sẽ máy chủ hiện tại của mạng con thông tin.
Sau đó, chúng tôi lật đổ giao diện hiện tại cầu docker0 nếu đang chạy xóa . Điều này cho phép chúng tôi để khởi động lại Docker với một slate sạch. Quá trình này sẽ đặt cấu hình giao diện docker0 bằng cách sử dụng thông tin mạng flannel.
Chúng tôi sử dụng cùng một khởi động lại chi tiết [cài đặt] chúng tôi đã sử dụng với các đơn vị khác của chúng tôi:
[Đơn vị]
Mô tả = Docker thùng chứa động cơ cấu hình để chạy với flannel
Requires=flannel.Service
After=flannel.Service
[Dịch vụ]
EnvironmentFile=/run/flannel/subnet.env
ExecStartPre =- / usr/bin/ip liên kết đặt dev docker0 xuống
ExecStartPre =- / usr/sbin/brctl del