Додавання нової версії відгуків
У цьому модулі ви розгортаєте нову версію сервісу reviews
, _v2_
, яка буде повертати кількість і колір зірок оцінок, наданих рецензентами. У реальному сценарії перед розгортанням ви б виконали статичний аналіз, юніт-тести, інтеграційні тести, кінцеві тести та тести в середовищі staging.
Розгорніть нову версію мікросервісу
reviews
без міткиapp=reviews
. Без цієї мітки нова версія не буде вибрана для надання сервісуreviews
. Таким чином, вона не буде викликана кодом, що працює в промисловому оточенні. Виконайте наступну команду, щоб розгорнути версію 2 мікросервісуreviews
, замінивши міткуapp=reviews
наapp=reviews_test
:$ curl -s https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml | sed 's/app: reviews/app: reviews_test/' | kubectl apply -l app=reviews_test,version=v2 -f - deployment.apps/reviews-v2 created
Перевірте ваш застосунок, щоб упевнитися, що розгорнутий мікросервіс не порушив його.
Протестуйте нову версію вашого мікросервісу зсередини кластера за допомогою тестового контейнера, який ви розгорнули раніше. Зверніть увагу, що ваша нова версія звертається до podʼів мікросервісу
ratings
у промисловому оточені під час тесту. Також зверніть увагу, що вам потрібно використовувати IP podʼа для доступу до вашої нової версії мікросервісу, оскільки вона не вибрана для сервісуreviews
.Отримайте IP podʼа:
$ REVIEWS_V2_POD_IP=$(kubectl get pod -l app=reviews_test,version=v2 -o jsonpath='{.items[0].status.podIP}') $ echo $REVIEWS_V2_POD_IP
Надішліть запит до podʼа і переконайтеся, що він повертає правильний результат:
$ kubectl exec $(kubectl get pod -l app=curl -o jsonpath='{.items[0].metadata.name}') -- curl -sS "$REVIEWS_V2_POD_IP:9080/reviews/7" {"id": "7","reviews": [{ "reviewer": "Reviewer1", "text": "An extremely entertaining play by Shakespeare. The slapstick humour is refreshing!", "rating": {"stars": 5, "color": "black"}},{ "reviewer": "Reviewer2", "text": "Absolutely fun and entertaining. The play lacks thematic depth when compared to other plays by Shakespeare.", "rating": {"stars": 4, "color": "black"}}]}
Виконайте первинне навантажувальне тестування, надіславши запит 10 разів поспіль:
$ kubectl exec $(kubectl get pod -l app=curl -o jsonpath='{.items[0].metadata.name}') -- sh -c "for i in 1 2 3 4 5 6 7 8 9 10; do curl -o /dev/null -s -w '%{http_code}\n' $REVIEWS_V2_POD_IP:9080/reviews/7; done" 200 200 ...
Попередні кроки гарантують, що ваша нова версія
reviews
буде працювати та ви можете її розгорнути. Ви розгорнете один екземпляр сервісу в промисловому оточенні, щоб реальний операційний трафік почав надходити до вашої нової версії сервісу. З поточними налаштуваннями 75% трафіку буде надходити до старої версії (три podʼа старої версії), а 25% до нової версії (один pod).Щоб розгорнути reviews v2, зробіть повторне розгортання нової версії з міткою
app=reviews
, щоб вона стала доступною через сервісreviews
.$ kubectl label pods -l version=v2 app=reviews --overwrite pod "reviews-v2-79c8c8c7c5-4p4mn" labeled
Тепер зайдіть на вебсторінку застосунку і спостерігайте, що чорні зірки зʼявляються для оцінок. Ви можете зайти на сторінку кілька разів і побачити, що іноді сторінка повертається з зірками (приблизно 25% часу), а іноді без зірок (приблизно 75% часу).
Вебзастосунок Bookinfo з чорними зірками оцінок Якщо ви зіткнетеся з проблемами з новою версією в реальному сценарії, ви можете швидко анулювати нову версію, щоб використовувалася лише стара версія:
$ kubectl delete deployment reviews-v2 $ kubectl delete pod -l app=reviews,version=v2 deployment.apps "reviews-v2" deleted pod "reviews-v2-79c8c8c7c5-4p4mn" deleted
Дайте час для того, щоб зміна конфігурації поширилася по системі. Потім, зайдіть на вебсторінку вашого застосунку кілька разів і перевірте, що тепер чорні зірки не зʼявляються.
Щоб відновити нову версію:
$ kubectl apply -l app=reviews,version=v2 -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml deployment.apps/reviews-v2 created
Зайдіть на вебсторінку вашого застосунку кілька разів і перевірте, що тепер чорні зірки присутні приблизно 25% часу.
Далі збільште кількість реплік вашої нової версії. Ви можете робити це поступово, уважно перевіряючи, що кількість помилок не зростає:
$ kubectl scale deployment reviews-v2 --replicas=3 deployment.apps/reviews-v2 scaled
Тепер зайдіть на вебсторінку вашого застосунку кілька разів і перевірте, що чорні зірки зʼявляються приблизно половину часу.
Тепер ви можете зняти з експлуатації стару версію:
$ kubectl delete deployment reviews-v1 deployment.apps "reviews-v1" deleted
Відкриття вебсторінки застосунку поверне відгуки лише з чорними зірками.
В попередніх кроках ви виконали оновлення reviews
. Спочатку, ви розгорнули нову версію без направлення до неї симульованого операційного трафіку. Ви протестували її у промисловому середовищі за допомогою тестового трафіку. Ви перевірили, що нова версія надає правильні результати. Ви випустили нову версію, поступово збільшуючи операційний трафік до неї. Нарешті, ви зняли з експлуатації стару версію.
З цього місця ви можете вдосконалити свою стратегію розгортання, використовуючи наступні приклади завдань. По-перше, протестуйте нову версію в промисловому оточенні. Це вимагає можливості направити трафік до вашої нової версії, використовуючи параметри запиту, наприклад, з використанням імені користувача, збереженого в куки. Крім того, виконайте “затемнення” (shadowing) операційного трафіку до вашої нової версії та перевірте, чи ваша нова версія надає некоректні результати або викликає помилки. Нарешті, отримайте більш детальний контроль над розгортанням. Наприклад, ви можете розгорнути оновлення для 1% трафіку, а потім збільшувати на 1% щогодини, поки не зʼявиться погіршення сервісу. Istio підвищує цінність Kubernetes, допомагаючи вам виконувати ці завдання зрозумілим способом. Для більш детальної інформації та найкращих практик про розгортання, дивіться Моделі розгортання.
З цього місця у вас є два варіанти:
Використовувати сервісну мережу. У сервісній мережі ви поміщаєте всю звітність, маршрутизацію, політики, логіку безпеки в sidecar проксі, інʼєкції яких у podʼи вашого застосунку відбувається прозоро. Бізнес-логіка залишається в коді застосунку, зміни в коді застосунку не потрібні.
Реалізуйте необхідний функціонал у коді застосунку. Більшість функціональності вже доступна в різних бібліотеках, наприклад, у бібліотеці Hystrix від Netflix для Java. Однак тепер вам потрібно змінити свій код, щоб використовувати бібліотеки. Вам потрібно докласти додаткових зусиль, ваш код стане громіздким, бізнес-логіка буде змішана зі звітністю, маршрутизацією, політиками, логікою мережі. Оскільки ваші мікросервіси використовують різні мови програмування, вам потрібно вивчати, використовувати, оновлювати кілька бібліотек.
Дивіться Сервісна мережа Istio, щоб дізнатися, як Istio може виконувати зазначені завдання та інші. У наступних модулях ви ознайомитесь з різними функціями Istio.
Ви готові до увімкнення Istio на productpage
.