Nhảy tới nội dung

· Một phút để đọc
ManhPT

Post-git là một module Powershell cho phép tích hợp Git với Powershell hỗ trợ git autocomplete. Posh-git có vài tính năng quan trọng như:

  • Cung cấp thông tin cơ bản về repository hiện tại trên dòng lệnh
  • Tự động gợi ý khi gõ lệnh (git autocomplete)

Giao diện Powershell sau khi tích hợp posh-git:

demo-posh-git-on-powershell

Trong một bài viết trước, mình có hướng dẫn cách cài đặt và tích hợp oh-my-posh cho Powershell để cải thiện trải nghiệm làm việc. Trong bài viết này mình sẽ giới thiệu posh-git.

1. Cài đặt posh-git

Trước khi cài đặt thì bạn cũng nên xem qua yêu cầu của posh-git trước tại đây.

Cài đặt qua Powershell

Install-Module posh-git -Scope CurrentUser

Cài đặt qua Chocolatey

choco install poshgit

Cài đặt qua Scoop

scoop install posh-git

2. Tích hợp post-git để sử dụng tính năng git autocomplete

Để tích hợp posh-git vào Powershell thì ta cần phải thực hiện bước Import-Module. Cách nhanh nhất để làm việc này chỉ là một dòng lệnh:

Add-PoshGitToProfile

Giao diện posh-git trên Powershell cơ bản:

powershell-post-git

Nếu thành công thì chỉ cần mở lại Powershell là đã có thể sử dụng posh-git với Powershell rồi. Nếu lệnh trên báo lỗi thì ta có thể làm thủ công bằng cách:

notepad $PROFILE

Cập nhật nội dung của $PROFILEfile và thêm dòngImport-Module posh-gitvào.

Nội dung file$PROFILE (C:\Users\$env:USERNAME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1) của bạn có thể sẽ như sau:

Import-Module oh-my-posh Import-Module posh-git Set-PoshPrompt -Theme honukai

Lưu lại và khởi động lại Powershell để hưởng thụ thành quả nhé.

Giao diện posh-git và oh-my-posh trên Powershell:

powershell-posh-git-oh-my-posh

Để nhận được gợi ý khi gõ lệnh với git thì bạn chỉ cần nhấn phím "Tab" là được.

· Một phút để đọc
ManhPT

TL;DR

Bài viết hướng dẫn cách cài đặt Oh-My-Posh vào Powershell.

Là một developer thì chắc hẳn bạn đã sử dụng shell/bash trên linux hay macos. Mà đã sử dụng shell/bash thì chắc cũng sẽ biết đến Oh My Zsh - một công cụ huyền thoại cho những ai yêu dòng lệnh (command line).

Một developer xuất thân MacOS như mình khi chuyển môi trường sang Windows đã luôn cảm thấy CMD hay Powershell rất tù khi phải làm việc chéo cánh với các server Linux. Ngoài ra khi làm việc với git command thì mình cũng bị phụ thuộc vào Git Bash để nhận được gợi ý khi gõ lệnh.

Sau một thời giản dài sống chung với lũ hồi tìm hiểu thì cuối cùng cũng tìm ra được chân ái - Oh My Posh. Oh My Posh giúp powershell trở nên đầy màu sắc đi kèm với những thông tin hữu ích liên quan đến project hiện tại và cả git nữa, quá ngon rồi 😁 mlem mlem...

powershell-ohmyposh-screenshot

Giao diện powershell sau khi được cài đặt OhMyPosh và danh sách themes để bạn chọn

1. Cài đặt Oh-My-Posh

Tài liệu chính chủ của Oh My Posh cũng đã có hướng dẫn rất đầy đủ rồi nhưng mình vẫn tóm tắt lại theo các bước cài đặt bằng Powershell cho tiện. Để cài đặt thì bạn mở Powershell với quyền Admin lên và:

Set-ExecutionPolicy RemoteSigned
Install-Module oh-my-posh -Scope CurrentUser

2. Sử dụng Oh-My-Posh

Để bắt đầu sử dụng Oh My Posh ngay trong powershell thì ta chỉ cần gõ lệnh sau:

Set-PoshPrompt -Theme honukai

Nhưng mỗi lần muốn sử dụng lại phải gõ lệnh thì bất tiện vl 🙄. Để đảm bảo mỗi lần mở Powershell lên mà Oh My Posh cũng sẵn sàng vào việc luôn thì cần sửa powershell profile (giống như cách ta update ~/.bash_profile ở linux/macos vậy):

notepad $PROFILE
# hoặc
notepad C:\Users\$env:USERNAME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Kết quả của lệnh trên là để cập nhật nội dung file Microsoft.PowerShell_profile.ps1, ta chỉ cần thêm nội dung như sau vào:

Set-PoshPrompt -Theme honukai

Xong bước này thì chỉ cần khởi động lại Powershell là bạn đã có thể sử dụng Oh My Posh rồi, nhưng nhìn nó sẽ sai sai như thế này:

oh-my-posh-with-out-nerd-fonts

3. Cài đặt font hỗ trợ Oh-My-Posh

Cái "sai sai" ở đây là lỗi font chữ nên bạn có thể nhìn thấy khá nhiều ký tự ⍰. Tài liệu của Oh My Posh có hướng dẫn rất rõ ràng là các bạn nên sử dụng Nerd Fonts (tham khảo), và họ khuyến khích sử dụng font Meslo LGM NF (tải về tại đây).

Bạn chỉ cần tải Meslo.zip về rồi giải nén ra rồi cài đặt.

cai-dat-meslo-font-oh-my-posh

Chưa xong, cần phải thay font cho Powershell nữa, click chuột phải vào thanh menu của cửa sổ Powershell > Properties > tab Fonts.

choose-font-meslo-oh-my-posh

Chọn font MesloLGM NF như ảnh trên rồi click OK. Thế là xong rồi, khởi động lại Powershell để hưởng thụ thành quả thôi. Max xịn sò 😎.

4. Thay đổi giao diện cho Oh-My-Posh (Optional)

Nếu bạn để ý một chút khi dùng Oh My Zsh thì nó sử dụng theme mặc định là robbyrussel. Đương nhiên là Oh My Zsh cũng cung cấp lựa chọn này cho bạn nếu bạn muốn có được cảm nhận tương đồng nhất có thể như với khi sử dụng bash trên linux/macos.

Như ở bước 2 mình có đặt sẵn câu lệnh Set-PoshPrompt -Theme honukai, có nghĩa là mình chọn sẵn theme honukai - theme này thì text không có màu nền nên khi mình sử dụng Powershell với VScode hay Jetbrains IDEs đều cho cảm giác dễ chịu.

Bạn có thể dùng lệnh Get-PoshThemes để liệt kê và chọn trong danh sách các themes có sẵn.

Get-PoshThemes

· Một phút để đọc
ManhPT

Mình đã có một bài viết về cách tăng dung lượng phân vùng ổ cứng trên linux. Nhưng có một trường hợp mà bài viết chưa nói đến là khi bạn sử dụng LVM. LVM cho phép bạn tạo, thay đổi dung lượng hoặc xóa phân vùng trong hệ thống mà không cần phải khởi động lại. Để tăng dung lượng cho LVM volume thì bạn có thể làm theo các bước sau:

1. Xác định phân vùng đĩa cứng chứa LVM volume

Trước tiên cần sử dụng lệnh lsblk để xem cấu trúc các phân vùng và ổ đĩa hiện tại.

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]

Có thể thấy là ta có một lvm volumerhel-root trong phân vùng /dev/vda2.

$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 rhel lvm2 a-- <29.00g 0

2. Mở rộng ổ đĩa vật lý (disk) và phân vùng (partition)

Bạn có thể bỏ qua bước này để đến thẳng 3 nếu phân vùng chứa ổ LVM của bạn đã được tự động tăng dung lượng (tự động hoặc ai đó đã tăng hộ bạn).

Như ở step 1, câu lệnh lsblk cho thấy rhel-root nằm trong ổ đĩa vật lý vda có dung lượng 30G. Mình sẽ tăng dung lượng của ổ đĩa này lên 40G (ổ đĩa cứng ảo - cách tăng dung lượng của một ổ đĩa cứng ảo sẽ tùy thuộc vào IaaS provider hoặc công cụ ảo hóa).

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 40G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]

Sau khi sử dụng lệnh lsblk một lần nữa thì ta thấy dung lượng của vda đã tăng lên thành 40G. Tiếp tục sử dụng lệnh growpart để mở rộng dung lượng cho phân vùng vda2 đang chứa rhel-root.

$ sudo growpart /dev/vda 2
CHANGED: partition=2 start=2099200 old: size=18872320 end=20971520 new: size=60815327,end=62914527

Sau khi growpart thì dung lượng của vda2 sẽ tăng lên xấp xỉ dung lượng của vda. Do có 1 phân vùng boot là vda1 đã chiếm 1G nên dung lượng còn lại thuộc về vda2 là 39G.

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 40G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 39G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]

Bây giờ ta đã đủ điều kiện để có thể tăng dung lượng cho ổ LVM là rhel-root.

3. Tăng dung lượng cho LVM volume

Resize volume vật lý:

$ sudo pvresize /dev/vda2
Physical volume "/dev/vda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 rhel lvm2 a-- <39.00g 10.00g

Kiểm tra dung lượng được cấu hình cho volume group:

$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <39.00g 10.00g

Bây giờ là lệnh quan trọng nhất, resize ổ LVM với lvextend.

$ sudo lvextend -l +100%FREE /dev/mapper/rhel-root
Size of logical volume rhel/root changed from <26.93 GiB (6893 extents) to <36.93 GiB (9453 extents).
Logical volume rhel/root successfully resized.

Bạn có thể thay thế +100%FREE bằng giá trị khác để phù hợp với nhu cầu. Ví dụ bạn muốn tăng dung lượng thêm 10GB thì có thể thay thế bằng +10G.

4. Cập nhật filesystem để nhận diện dung lượng mới

Nếu kiểm tra dung lượng thực tế được sử dụng bởi filesystem thì có thể thấy nó vẫn hiển thị dung lượng cũ.

$ df -hT | grep mapper
/dev/mapper/rhel-root xfs 27G 1.9G 26G 8% /

Để filesystem có thể nhận diện dung lượng đã thay đổi thì ta chỉ cần sử dụng resize2fs đối với ext4xfs_growfs đối với xfs.

Với ext4:

$ sudo resize2fs /dev/mapper/rhel-root
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/mapper/rhel-root is mounted on /; on-line resizing required
old_desc_blocks = 60, new_desc_blocks = 121
The filesystem on /dev/mapper/rhel-root is now 253365248 (4k) blocks long.

Với xfs:

$ sudo xfs_growfs /
meta-data=/dev/mapper/rhel-root isize=512 agcount=4, agsize=1764608 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=7058432, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=3446, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 7058432 to 9679872

Để cho chắc thì bạn có thể kiểm tra lại với câu lệnh lsblk.

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 40G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 39G 0 part
├─rhel-root 253:0 0 36.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]

Vậy là xong.

· Một phút để đọc
ManhPT

TL;DR

Nội dung bài viết dành cho elasticsearch và kibana 7.x.

Vấn đề là...

Ở công ty mình vừa có mấy task devops liên quan đến scaling, clustering Elasticsearch nên viết lại đề phòng sau này cần dùng. Có một task là chuyển dữ liệu từ single-node Elasticsearch cũ lên cluster mới. Single-node Elasticsearch cũ nằm trên một máy chủ ảo (VM) riêng và deploy bằng docker-compose. Cluster Elasticsearch mới thì được deploy với Helm trong Kubernetes và trên một cụm VM khác.

Có một cách tương đối đơn giản để thực hiện việc này đó là tạo snapshot backup trên single-node cũ và restore snapshot đó trên cluster mới. Sau một hồi google thì mình cũng đã chốt lại được các bước cơ bản sử dụng Kibana:

  1. Cài đặt plugin repository-s3
  2. Cấu hình AWS S3 credentials cho Elasticsearch
  3. Register một repository với type S3 trên single-node Elasticsearch cũ
  4. Tạo snapshot policy để tự động hóa việc chụp snapshot và đẩy lên S3 bucket từ Elasticsearch cũ
  5. Register một repository tương tự trên cluster Elasticsearch mới và restore snapshot

Sau đây chúng ta đi vào chi tiết.

1. Cài đặt plugin repository-s3 cho Elasticsearch

1.1. Rebuild Elasticsearch docker image

Việc cài đặt và kích hoạt plugin đòi hỏi phải khởi động lại cluster Elasticsearch. Do đó, ta không thể cài đặt trực tiếp mà cần phải chỉnh sửa Elasticsearch image. Cụ thể là cần viết một Dockerfile mới để build một image mới từ image elasticsearch mặc định:

Dockerfile
ARG version=latest
FROM docker.elastic.co/elasticsearch/elasticsearch:${version}
RUN bin/elasticsearch-plugin install --batch repository-s3

Gõ lệnh build image như sau:

# latest version
docker build --tag yourname/elasticsearch .
# specific version
docker build --build-arg version=7.10.1 --tag your-name/elasticsearch:7.10.1 .
# more fancy specific version command
export VERSION=7.10.1 && docker build --build-arg version=$VERSION --tag yourname/elasticsearch:$VERSION -f elasticsearch.dockerfile .

Nếu quá trình build image diễn ra tốt đẹp thì ta có thể thấy output như sau:

...
-> Installing repository-s3
-> Downloading repository-s3 from elastic
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessDeclaredMembers
* java.lang.RuntimePermission getClassLoader
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.net.SocketPermission * connect,resolve
* java.util.PropertyPermission es.allow_insecure_settings read,write
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
-> Installed repository-s3
...

Sau khi build image thành công thì push image đó lên đâu đó mà Kubernetes cluster của bạn có thể kéo về được, VD: docker hub, AWS ECR... Nếu bạn đẩy image lên một private registry thì cần chú ý cấu hình imagePullSecrets.

1.2. Deploy lại single-node Elasticsearch cũ với image vừa tạo

Thường thì Elasticsearch cũ sẽ khởi chạy lại thành công, nếu phát sinh lỗi gì thì xem log rồi cố gắng google xem vì sao... lol... 😂

  1. Cấu hình AWS S3 credentials

Để thực hiện bước này thì cần phải docker exec (chui) vào trong container của Elasticsearch cũ và gõ:

elasticsearch-keystore add s3.client.default.access_key
elasticsearch-keystore add s3.client.default.secret_key

2 lệnh trên sẽ yêu cầu bạn nhập (prompt) thông tin nhưng khi nhập sẽ không nhìn thấy gì đâu, cứ copy paste rồi enter. Đại loại bạn sẽ nhìn thấy màn hình hiển thị như sau:

[root@xxxxxx bin]# elasticsearch-keystore add s3.client.default.access_key
Enter value for s3.client.default.access_key:
[root@xxxxxx bin]# elasticsearch-keystore add s3.client.default.secret_key
Enter value for s3.client.default.secret_key:

Để có access_keysecret_key từ một IAM user có quyền đọc ghi S3 bucket, truy cập AWS IAM Users > chọn user có quyền trên dịch vụ S3 > Security credentials > Create access key.

Nhập credentials xong thì khởi động lại single-node Elasticsearch. Sau khi khởi động lại thành công thì mở Kibana Dev Tools để reload_secure_settings:

POST _nodes/reload_secure_settings
{}

3. Register một repository với type S3

3.1. Nhập tên và chọn kiểu là S3 --> nhấn Next

3.2. Nhập tên bucket --> nhấn Register

Bucket cần được khởi tạo trước trên AWS S3 console.

3.3. (optional) Verify repo

Sau khi register thành công, màn hình sẽ hiển thị thông tin repo vừa được tạo. Bạn sẽ nhìn thấy nút "Verify repository" ở panel chi tiết phía bên phải, sau khi nhấn nút này thì Kibana sẽ hiển thị "Verification status" là connected.

Nếu status là "Not connected" thì thông tin lỗi cũng sẽ được hiển thị trong mục Details.

4. Tạo Policy để tự động hóa tạo và xóa snapshot

Ta chỉ cần chuyển sang tab policy, nằm ngay bên cạnh repository. Nhấn "Create a policy".

Các bước tạo policy khá đơn giản và trực quan trên giao diện của Kibana. Bạn có thể tham khảo tài liệu chính hãng tại đây: https://www.elastic.co/guide/en/kibana/current/snapshot-repositories.html#kib-snapshot-policy.

Snapshot details

5. Restore snapshot trên cluster Elasticsearch mới

5.1. Lặp lại các bước từ 1.2 đến 3.3 với cluster Elasticsearch mới

Trong scope của bài viết này thì ta chỉ cần restore snapshot trên cluster mới nên không cần tạo policy để backup.

5.2. Restore snapshot

Vào tab Snapshots, chọn snapshot mới nhất và nhấn Restore.

Snapshot details

Sau khi quá trình restore bắt đầu thì bạn có thể theo dõi trạng thái tại tab "Restore Status".

Snapshot details

Thế là xong rồi. Cảm ơn bạn đã đọc đến đây! 😆

· Một phút để đọc
ManhPT

Trên các hệ thống hạ tầng cloud, sau khi sizing (bổ sung dung lượng) ổ đĩa ảo (volume), ta cần phải thực hiện thêm một vài lệnh đặc thù trên từng phân vùng ổ đĩa (partition) để hệ thống thực sự nhận diện được dung lượng mới thêm.

Chú ý: Trước khi cập nhật dụng lượng trên ổ đĩa có chứa dữ liệu quan trọng thì ta nên backup dữ liệu hoặc tạo snapshot cho ổ đĩa đó trên các hệ thống cloud mà có hỗ trợ tính năng snapshot.

Các bước cơ bản

Sau đó, thực hiện cập nhật dung lượng phân vùng theo các bước sau:

  1. Việc tăng thêm dung lượng cho ổ đĩa ảo không đồng thời tăng dung lượng cho phân vùng bên trong nó. Do đó, ta cần phải kiểm tra xem phân vùng cần tăng thêm dung lượng có nằm bên trong ổ đĩa vừa được bổ sung dung lượng hay không.
  2. Thực hiện các câu lệnh đặc thù để tăng dung lượng cho các phân vùng dựa trên định dạng của phân vùng đó.

Nội dung bài viết hiện tại chỉ hướng dẫn cách tăng dung lượng phân vùng cho các sử dụng định dạng: xfs, ext4 trên các máy chủ ảo của AWS, GCP, Azure hoặc VMWare.

Các bước chi tiết

Trong ví dụ sau, giả sử bạn đã tăng dung lượng ổ đĩa...

1. Kiểm tra định dạng của phân vùng cần tăng bằng câu lệnh df -hT

$ df -hT

Sau đây là kết quả mà bạn sẽ nhận được

$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvda1 ext4 8.0G 1.9G 6.2G 24% /
/dev/xvdf1 xfs 8.0G 45M 8.0G 1% /data

2. Kiểm tra phân vùng cần tăng dung lượng có nằm trong ổ đĩa đã được bổ sung dung lượng không bằng lệnh lsblk

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 16G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 30G 0 disk
└─xvdf1 202:81 0 8G 0 part /data

Từ kết quả trên ta thấy:

  • Ổ đĩa /dev/xvda có 1 phân vùng là /dev/xvda1. Trong khi dung lượng ổ đĩa là 16G thì dung lượng phân vùng chỉ có 8G nên có thể tăng dung lượng cho phân vùng /dev/xvda1.
  • Ổ đĩa /dev/xvdf có 1 phân vùng là /dev/xvdf1. Trong khi dung lượng ổ đĩa là 30G thì dung lượng phân vùng chỉ có 8G nên có thể tăng dung lượng cho phân vùng /dev/xvdf1.

3. Thực hiện tăng dung lượng phân vùng bằng lệnh growpart

ubuntu@ip-172-31-13-xxx:~$ sudo growpart /dev/xvda 1
ubuntu@ip-172-31-13-xxx:~$ sudo growpart /dev/xvdf 1

Nếu phân vùng có định dạng xfs, dùng lệnh xfs_growfs:

ubuntu@ip-172-31-13-xxx:~$ sudo xfs_growfs -d /
ubuntu@ip-172-31-13-xxx:~$ sudo xfs_growfs -d /data

Nếu xfs_growfs chưa tồn tại thì cài đặt bằng cách:

for debian/ubuntu-based
ubuntu@ip-172-31-13-xxx:~$ sudo apt-get install xfs_growfs
for centos/rehl-based
ubuntu@ip-172-31-13-xxx:~$ sudo yum install xfs_growfs

Nếu phân vùng có định dạng ext4, dùng lệnh resize2fs:

ubuntu@ip-172-31-13-xxx:~$ sudo resize2fs /dev/xvda1
ubuntu@ip-172-31-13-xxx:~$ sudo resize2fs /dev/xvdf1

Kiểm tra lại kết quả thay đổi với df -h

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 16G 1.9G 14G 12% /
/dev/xvdf1 30G 45M 30G 1% /data

Bài viết có tham khảo và dịch lại từ: Extending a Linux file system after resizing a volume - Amazon Elastic Compute Cloud

· Một phút để đọc
ManhPT

Vấn đề là...

Bài viết này hướng dẫn nhanh cách thay đổi hostname trên Ubuntu 18.04.

Hostname thường được thiết lập khi bạn cài đặt hệ điều hành hoặc khởi tạo một máy chủ ảo (VM) thì nó sẽ được gán tự động. Cách thay đổi hostname dưới đây có thể áp dụng mà không cần phải khởi động lại hệ điều hành.

Mặc dù hướng dẫn dành cho Ubuntu 18.04 nhưng bạn có thể áp dụng nó cho Ubuntu 16.04 hoặc bất kỳ hệ điều hành nào base trên Ubuntu, VD: Linux Mint, Elementary OS và thậm chí cả ViettelOS.

Yêu cầu

Trước khi bắt đầu, hãy đảm bảo bạn đã đăng nhập với user có quyền sudo.

Hostname là một nhãn giúp định danh máy tính/thiết bị trong một không gian mạng (network). Hãy cẩn thận và tránh sử dụng trùng hostname trên 2 máy khác nhau trong cùng mạng.

Hiển thị hostname hiện tại

hostnamectl

Kết quả của lệnh trên sẽ như sau: Như trong ảnh trên thì hostname hiện tại là giá trị của Static hostname, tức là: ubuntu1804.localdomain.

Thay đổi hostname

1. Thay đổi hostname sử dụng hostnamectl

Trong Ubuntu 18.04, bạn có thể thay đổi hostname hệ thống và các thiết lập liên quan bằng lệnh hostnamectl. Ví dụ, để thay đổi system hostname thành "manhpt.local", bạn sẽ sử dụng lệnh như sau:

sudo hostnamectl set-hostname manhpt.local

Lệnh hostnamectl set-hostname không tạo hay hiển thị ra output gì. Nếu thành không thì sẽ không có gì cả.

2. Sửa file /etc/hosts

Mở file /etc/hosts và thay đổi hostname cũ thành "manhpt.local":

/etc/hosts
127.0.0.1 localhost
127.0.0.1 manhpt.local

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

3. Sửa file /etc/cloud/cloud.cfg

Nếu cloud-init package được cài đặt thì bạn cần phải sửa file cloud.cfg để đảm bảo hostname mới được lưu sau khi khởi động lại hệ điều hành. cloud-init thường được cài đặt mặc định trong hệ thống của AWS, VMWare... và nó được sử dụng để xử lý công đoạn khởi tạo máy ảo (cloud instances).

Để kiểm tra xem cloud-init có được cài đặt hay không thì có thể sử dụng lệnh ls:

ls -l /etc/cloud/cloud.cfg

Nếu bạn thấy câu lệnh trả ra kết quả như sau thì không cần làm thêm gì nữa vì cloud-init không được cài đặt, tức là có thể không cần tiếp tục đọc bài viết này nữa 🤣:

ls: cannot access '/etc/cloud/cloud.cfg': No such file or directory

Nếu cloud-init được cài đặt thì output sẽ như sau:

-rw-r--r-- 1 root root 3169 Apr 27 09:30 /etc/cloud/cloud.cfg

Sửa file /etc/cloud/cloud.cfg với vim hoặc nano hoặc bất cứ editor nào bạn muốn:

sudo vim /etc/cloud/cloud.cfg

Tìm preserve_hostname và đổi giá trị từ false thành true:

/etc/cloud/cloud.cfg
...
# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true
...

Lưu lại thay đổi và tắt editor.

Kiểm tra thay đổi

Để kiểm tra xem các thay đổi của bạn đã thành công hay chưa thì chỉ cần sử dụng lại lệnh hostnamectl.

hostnamectl

Kết quả:

Static hostname: manhpt.local
Icon name: computer-vm
Chassis: vm
Machine ID: 6f17445f53074505a008c9abd8ed64a5
Boot ID: 1c769ab73b924a188c5caeaf8c72e0f4
Virtualization: kvm
Operating System: Ubuntu 18.04 LTS
Kernel: Linux 4.15.0-22-generic
Architecture: x86-64

Bạn sẽ thấy giá trị của Static hostname được đổi thành manhpt.local. Bạn cũng có thể khởi động lại máy và kiểm tra lại một lần nữa để chắc chắn rằng cloud-init được cấu hình chính xác. Bài viết có tham khảo và dịch lịch từ: How to Change Hostname on Ubuntu 18.04

· Một phút để đọc
ManhPT

Vấn đề là...

Ubuntu là một trong những distro phổ biến nhất của Linux. Ngoài Ubuntu Server thì Ubuntu Desktop cũng được anh em developer sử dụng rất nhiều. Do tính chất dễ sử dụng và ổn định nên team dự án của mình hiện tại đang sử dụng Ubuntu Desktop cho những máy trạm (workstation) đặt tại địa điểm, văn phòng của đối tác.

Thực trạng này đôi khi phát sinh yêu cầu phải thay đổi local IP và DNS của máy trạm cho phù hợp với địa điểm triển khai. Tuy nhiên, các máy trạm này lại không được kết nối màn hình mà chỉ được duy trì kết nối internet và kết nối từ xa qua Anydesk.

Để thực hiện yêu cầu thay đổi IP/DNS của máy trạm, team phát triển chỉ có thể thao tác thông qua Terminal sau khi forward và kết nối đến SSH port của máy trạm từ máy làm việc. Việc forward và kết nối SSH đến máy trạm qua Anydesk sẽ nằm trong bài viết khác.

Để thay đổi IP

nmcli connection modify "Wired Connection 1" ipv4.addresses 192.168.1.101

Để thay đổi DNS

nmcli connection modify "Wired Connection 1" ipv4.dns 8.8.8.8,8.8.4.4

Để cập nhật thay đổi

systemctl restart NetworkManager.service

Trong bài viết có sử dụng nmcli để thực hiện thay đổi cấu hình của các network connection của NetworkManager. Tham khảo nmcli referencenmcli examples.

· Một phút để đọc
ManhPT

Lens là một phần mềm nguồn mở cung cấp giao diện thân thiện để làm việc với nhiều kubernetes cluster

Khi khối lượng công việc được chuyển lên môi trường container (cụ thể là docker) ngày một nhiều, việc quản lý một số lượng lớn container và kết nối giữa chúng trở lên khó khăn hơn.

Khi quy mô và độ phức tạp của môi trường container tăng lên vượt quá khả năng quản lý bởi sức người, các nền tảng quản lý cấp phát container như Kubernetes ngày càng trở nên quan trọng.

Tuy nhiên, các nền tảng như vậy cũng đi liền với những thách thức đòi hỏi các thông số, khả năng giám sát và mức độ thân thiện với người dùng để diễn tả mức độ phức tạp của chúng.

Sử dụng Lens

Lens - tự xưng Kubernetes IDE - là một công cụ khá hữu ích, hấp dẫn và open source cung cấp khả năng quản lý các kubernetes cluster. Lens có thể kết nối đến các kubernetes cluster sử dụng kubeconfig file, sau đó hiển thị các thông tin về cluster và objects bên trong.

Lens cũng có thể kết nối hoặc cài đặt Prometheus stack để cung cấp các thông số về cluster, bao gồm thông tin và tình trạng các node.

Màn hình cluster overview

Tương tự Kubernetes dashboard hoặc Openshift, Lens cung cấp các cập nhật realtime về tình trạng của cluster và thu thập thông số giám sát với Prometheus.

Cài đặt Lens

Việc cài đặt khá đơn giản và hỗ trợ 3 nền tảng chính: Windows, MacOS, Linux. Có nhiều cách đề cài đặt và đơn giản nhất là tải về và cài đặt từ https://github.com/lensapp/lens/releases/latest. Ngoài ra, cũng có thể cài đặt bằng dòng lệnh với:

Windows (Chocolatey)

choco install -y lens

Ubuntu/Linux (Snap)

  1. Tải Lens package dành cho Snap.
  2. Sau khi tải về, thực hiện lệnh cài đặt snap như sau:
sudo snap install Lens-{version}.amd64.snap --dangerous --classic

Sau đó có thể bắt đầu sử dụng lens bằng cách gõ "lens" vào terminal.

MacOS

brew install --cask lens

Lens giúp nhìn ngắm Kubernetes rõ ràng hơn

Kubernetes rất phức tạp và nó có lý do để phải phức tạp. Lens không chỉ giúp giảm bớt rào cản đối với những người mới bắt đầu mà còn giúp những người đã có kinh nghiệm với kubernetes dễ thở hơn.

Ngoài cung cấp các thông số cơ bản về cluster, các node, lens còn có thể cung cấp thông tin chi tiết về các objects bên trong. Việc cài đặt hay hiển thị thông số giám sát từ Prometheus stack trở nên cực kỳ dễ dài chỉ với vài lần click chuột.

Ấn tượng hơn nữa, Lens có thể quản lý nhiều cluster cùng lúc và cho phép chuyển đổi giữa các cluster cực dễ dàng chỉ bằng cách nhấn nút. Bài viết có tham khảo và dịch lại từ: https://opensource.com/article/20/6/kubernetes-lens.