‫Cập nhật dịch vụ. Có thể bạn đã cho rằng có một số cách để cập nhật dịch vụ của mình
‫mặc dù chúng tôi chưa tập trung vào điều đó.
‫Hãy nói về nó vì các bản cập nhật có rất nhiều thứ đang diễn ra bên dưới. Chức năng cập nhật của Swarm tập trung vào mô hình
‫cập nhật luân phiên cho các bản sao của bạn. Điều đó có nghĩa là nếu bạn có một dịch vụ với nhiều
‫hơn một bản sao và hy vọng bạn làm vậy, dịch vụ sẽ chạy qua chúng theo mặc định, từng cái một,
‫cập nhật từng vùng chứa bằng cách thay thế nó bằng cài đặt mới mà bạn đang đưa vào bản cập
‫nhật yêu cầu.
‫Nhiều người sẽ nói rằng bộ điều phối ngăn chặn thời gian chết trong các bản cập nhật, nhưng tôi sẽ không nói rằng
‫điều này ngăn thời gian chết.
‫Tôi sẽ nói rằng nó giới hạn thời gian chết. Bởi vì ngăn chặn thời gian chết trong bất kỳ hệ thống nào là công việc của thử nghiệm.
‫Bạn thực sự cần bắt đầu kiểm tra cách bạn thực hiện cập nhật và xác định xem nó có ảnh hưởng đến người dùng của tôi không?
‫Việc cập nhật cơ sở dữ liệu có ảnh hưởng đến ứng dụng web của tôi không? Nó có thể xảy ra.
‫Mỗi ứng dụng mà bạn có dịch vụ sẽ cập nhật và tác động khác nhau đến những thứ
‫xung quanh nó.
‫Đó không phải là công việc của một người dàn nhạc.
‫Người điều khiển không thể xác định rằng đây là một giao thức cơ sở dữ liệu và đây là một giao thức ứng dụng REST
‫rất dễ dàng.
‫Vì vậy, đó sẽ là những điều khác biệt, phức tạp mà bạn cần phải giải quyết.
‫Trong trường hợp cập nhật dịch vụ, nếu đó chỉ là API REST hoặc giao diện web không hoạt động bất kỳ thứ gì lạ mắt như ổ cắm
‫web hoặc thăm dò ý kiến dài, nếu đó là một cái gì đó rất đơn giản như vậy hoặc một trang web tĩnh, bạn có thể
‫sẽ có một bản cập nhật dễ dàng và nó sẽ không là một vấn đề.
‫Nhưng các dịch vụ khác như cơ sở dữ liệu hoặc lưu trữ liên tục hoặc bất kỳ thứ gì yêu cầu kết nối liên tục ...
‫những thứ đó sẽ luôn là một thách thức bất kể bạn đang cố gắng cập nhật điều gì.
‫Vì vậy, hãy kiểm tra sớm và kiểm tra thường xuyên.
‫Giống như tôi đã nói trước đây, điều này chắc chắn sẽ thay thế các vùng chứa trong hầu hết các bản cập nhật. Trừ khi bạn đang cập nhật nhãn hoặc
‫một số siêu dữ liệu khác với dịch vụ, còn không thì dịch
‫vụ sẽ triển khai và thay đổi từng vùng chứa bằng một cái hoàn toàn mới.
‫Chỉ cần chuẩn bị cho điều đó. Nó có nhiều lựa chọn. Trên thực tế, lần cuối
‫cùng tôi đếm, có ít nhất 77 tùy chọn cho lệnh cập nhật. Nhưng mọi thứ bạn muốn làm đều có
‫thể được tinh chỉnh.
‫Rất nhiều tùy chọn trong lệnh cập nhật thực sự là tạo ra các tùy chọn
‫chỉ có -rm và -add ở cuối chúng. Bởi vì nếu đó là một tùy chọn có thể được sử dụng cho nhiều
‫giá trị, giả sử một cổng để xuất bản hoặc một biến môi trường, những người bạn có thể sử dụng nhiều giá trị đó.
‫Đúng?
‫Vì vậy, bạn cần có khả năng cho lệnh cập nhật biết những cái nào bạn đang thêm và cái nào bạn đang xóa.
‫Chúng tôi sẽ thấy những điều đó trong một phút.
‫Điều này cũng bao gồm các tùy chọn khôi phục và kiểm tra sức khỏe.
‫Bạn nên xem xét các tùy chọn cho những thứ đó và xem liệu giá trị mặc định của chúng có không lý tưởng cho ứng dụng của bạn hay không
‫và thử nghiệm các cài đặt khác nhau để xem liệu nó có giúp cập nhật dễ dàng hơn cho bạn và hệ thống của bạn hay không.
‫Bạn cũng sẽ thấy rằng chúng tôi có các tùy chọn quy mô và khôi phục ở đây, bây giờ là các lệnh của riêng chúng.
‫Chúng từng là các tùy chọn mà bạn phải chỉ định với --rollback hoặc --scale, nhưng rất nhiều người
‫đã sử dụng chúng thường xuyên đến mức Docker hiện đang biến họ thành công dân hạng nhất
‫trong dòng lệnh.
‫Họ có thể sẽ bổ sung thêm những thứ đó trong tương lai.
‫Cuối cùng, trước khi chúng ta đi đến một số ví dụ, nếu bạn đang thực hiện ngăn xếp, thì việc triển khai ngăn xếp cho cùng một ngăn xếp là một
‫bản cập nhật.
‫Trên thực tế, không có tùy chọn riêng cho các bản cập nhật ngăn xếp.
‫Bạn chỉ cần triển khai ngăn xếp với cùng một tệp đã được chỉnh sửa.
‫Sau đó, nó sẽ hoạt động với các lệnh dịch vụ và mạng, và mọi thứ khác mà nó làm. Nó sẽ làm việc với họ để đảm
‫bảo rằng nếu bất kỳ thay đổi nào là cần thiết, họ sẽ được áp dụng.
‫Hãy xem một số ví dụ nhanh và sau đó chúng ta sẽ đi đến dòng lệnh.
‫Đây có lẽ là ví dụ phổ biến nhất mà bạn sẽ sử dụng, đó là thay đổi hình ảnh của một
‫dịch vụ.
‫Mỗi khi bạn cập nhật ứng dụng của mình và tạo một hình ảnh mới, bạn sẽ phải thực
‫hiện lệnh cập nhật dịch vụ, với tên hình ảnh và sau đó là tên dịch vụ.
‫Vì vậy, trong trường hợp này, có thể tôi đã có ứng dụng của mình với thẻ là 1. 2. 0.
‫Và trong trường hợp này, tôi đang áp dụng phương pháp 1. 2. 1 hình ảnh và dịch vụ sẽ
‫xác định, à vâng, đó là hình ảnh khác với hình ảnh tôi
‫đang chạy trong dịch vụ của mình và chúng tôi sẽ cập nhật chúng. Trong phần tiếp theo này, chúng tôi sẽ chỉ ra cách bạn có thể thực hiện nhiều việc cùng một
‫lúc bên trong một lệnh cập nhật duy nhất.
‫Bạn có thể thêm một biến môi trường với env-add, và sau đó bạn có thể xóa một cổng với
‫xuất bản -rm.
‫Chúng tôi cũng có thể thêm và xóa các biến môi trường và xuất bản các cổng trong
‫cùng một lệnh cập nhật tùy thích. Ở phần cuối cùng này, phần này cho thấy cách chúng ta có thể
‫sử dụng các lệnh scale và rollback mới này trên nhiều dịch vụ cùng một lúc. Một trong những lợi thế của việc sử dụng chúng
‫so với lệnh cập nhật là chúng có thể áp dụng cho nhiều dịch vụ.
‫Trong trường hợp này, tôi thực sự sẽ thay đổi số lượng bản sao của web và các dịch
‫vụ API cùng một lúc.
‫Giống như tôi đã nói trước đây, trong các bản cập nhật Swarm, bạn không có lệnh triển khai khác.
‫Nó chỉ là triển khai ngăn xếp docker giống nhau, với tệp bạn đã chỉnh sửa và công việc là làm việc với tất
‫cả các phần khác của API để xác định xem có bất kỳ thay
‫đổi nào cần thiết hay không và sau đó triển khai chúng với bản cập nhật dịch vụ.
‫Được rồi. Hãy bắt đầu bằng cách thực sự tạo một dịch vụ để chúng ta có thể thao tác với nó bằng một số lệnh cập nhật.
‫dịch vụ docker tạo web tên -p 8088 80 và chúng tôi sẽ sử dụng Nginx và chúng tôi sẽ chỉ định một phiên bản giống như
‫chúng tôi luôn làm trong quá trình sản xuất.
‫Thật tuyệt, bây giờ chúng tôi thực sự có trong nửa cuối năm 2017, tùy chọn tách rời với các lệnh tạo và cập nhật dịch vụ của chúng tôi, chúng
‫tôi thực sự có thể thấy điều này xảy ra đồng bộ trong thời gian thực.
‫Vì vậy, điều này sẽ tốt cho các lệnh cập nhật để xem các bản cập nhật thực sự triển khai như thế nào thông qua dòng lệnh.
‫Được rồi. Bây giờ, nếu chúng tôi thực hiện một dịch vụ docker ls, chúng tôi thấy rằng
‫dịch vụ của chúng tôi đang chạy và nó có 1 trong số 1 bản sao, vì vậy thật tốt để tiếp tục.
‫Bây giờ, hãy mở rộng quy mô dịch vụ của chúng tôi để chúng tôi có thể có thêm một số bản sao để làm việc cùng. quy mô dịch vụ docker
‫Web = 5. Và bạn chỉ thấy rằng một trong những cái đó đã chạy,
‫và 4 cái còn lại phải bắt đầu. Nó diễn ra khá nhanh đối với tôi vì tôi đã tải
‫xuống hình ảnh, nhưng hình ảnh của bạn có thể mất vài phút trong khi chúng ở trạng thái chờ xử lý khi hình ảnh tải xuống
‫trên các nút khác.
‫Được rồi.
‫Hãy thực hiện cập nhật liên tục bằng cách thay đổi hình ảnh của Nginx đó.
‫Bạn sẽ thấy ở đây rằng tôi đã chọn một hình ảnh cũ hơn.
‫Bây giờ, Docker không quan tâm đến hình ảnh thực sự là gì.
‫Nó có thể là một ứng dụng hoàn
‫toàn khác cho tất cả những gì nó quan tâm. Nó chỉ biết rằng trong dịch vụ này, tôi đang thay đổi nó thành một hình ảnh khác.
‫Hãy nhớ rằng, theo mặc định, nó sẽ đi qua đây từng lần một.
‫Đầu tiên, nó sẽ xóa nó, tạo một cái mới, và sau đó khi cái đó tốt đi
‫và nó trông khỏe mạnh, nó sẽ bắt đầu trong cái tiếp theo. Trong ví dụ tiếp theo, chúng ta sẽ thay đổi cổng đã
‫xuất bản.
‫Nhưng bạn không thể thay đổi một cổng.
‫Bạn thực sự phải thêm và xóa chúng cùng một lúc.
‫Vì vậy, trong trường hợp này, vì lần đầu tiên chúng tôi xuất bản nó với 8088, chúng tôi cần thực hiện cập nhật
‫Dịch vụ docker xuất bản rm 8088. Tôi không cần chỉ định giá trị. Tôi chỉ cần xác định khóa. Sau đó, chúng
‫tôi sẽ xuất bản cái mới, 9090. Sau đó, giá trị, trong trường hợp này là 80. Bạn sẽ thấy rằng nó sẽ thực
‫hiện quá trình cập nhật tương tự như trước đây.
‫Ví dụ cuối cùng tôi muốn nói đến là một loại tiền boa. Bởi vì bạn sẽ thường gặp thách thức với một
‫thứ gọi là tái cân bằng. Hoặc nếu bạn thay đổi số lượng nút hoặc nếu bạn di chuyển nhiều thứ xung quanh, nếu bạn có
‫nhiều vật chứa trong bầy của mình, bạn có thể thấy rằng chúng chưa thực sự được bố trí. Bạn có thể có một
‫số nút khá nhẹ về số lượng vùng chứa đang chạy
‫và những nút khác có rất nhiều. Nếu bạn có nhiều thứ thay đổi, Swarm sẽ không di chuyển mọi thứ xung quanh để
‫giữ mọi thứ cân bằng về số lượng tài nguyên được sử dụng.
‫Tuy nhiên, những gì bạn có thể làm là bạn có thể buộc cập nhật một dịch vụ ngay cả khi không thay đổi bất kỳ điều gì trong dịch vụ đó.
‫Sau đó, nó sẽ phát hành lại các nhiệm vụ và trong trường hợp đó, nó sẽ chọn các nút ít được sử dụng nhất, đây là một hình thức tái cân bằng.
‫Rất nhiều lần trong một nhóm nhỏ hơn khi tôi di chuyển một cái gì đó lớn hoặc thêm một loạt các nút, tôi đột nhiên có một loạt
‫các máy chủ trống không làm gì cả và tôi cần phải làm việc với chúng.
‫Vì vậy, những gì tôi sẽ làm là sử dụng một hoặc hai dịch vụ của mình và tôi sẽ thực hiện cập nhật
‫dịch vụ docker - bắt buộc và trong trường hợp này, nó sẽ hoàn tất và thay thế hoàn toàn các tác vụ.
‫Tất nhiên, nó sẽ sử dụng mặc định của lịch trình để tìm kiếm các nút có số lượng vùng chứa ít nhất
‫và số lượng tài nguyên được sử dụng ít nhất.
‫Đó là một mẹo nhỏ để giải quyết khối lượng công việc không đồng đều trên các nút của bạn.
‫Hãy nhớ dọn dẹp bằng cách xóa dịch vụ mà chúng tôi đã tạo trong bài giảng này.