一、簡介
1.簡介
kubernetes,簡稱K8s,是用8代替8個字符“ubernete”而成的縮寫。是一個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。
Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程序時,通常要部署該應用的多個實例以便對應用請求進行負載均衡。
在Kubernetes中,我們可以創建多個容器,每個容器里面運行一個應用實例,然后通過內置的負載均衡策略,實現對這一組應用實例的管理、發現、訪問,而這些細節都不需要運維人員去進行復雜的手工配置和處理。
2.架構
1)Kubernetes集群的組成
1.1 Master節點的核心組件
Master節點是Kubernetes集群的管理和控制節點。Master節點由如下4個進程組成:
apiserver:提供Restful API,是整個集群管理和控制的入口。apiserver封裝了資源對象的CRUD操作并持久化到etcd中,REST API提供給外部客戶端和內部組件調用。
scheduler:是調度器,主要負責Pod調度,每個Pod最終被調度到哪臺服務器上是由Scheduler決定的
controller-manager:是比較關鍵的組件,是Kubernetes集群中所有資源的自動化控制中心
etcd: etcd是一個分布式的鍵值存儲,它實際上保存整個Kubernetes集群各種資源和狀態,可以它理解成Kubernetes集群的數據庫。
scheduler和controller-manager都是通過apiserver從etcd中獲取各種資源的狀態,進行相應的調度和控制操作。
? 1.2? ?Node節點的組件
Node節點是Kubernetes集群的工作負載節點,我們的服務實例是跑在多個Node節點上。Node節點上主要有如下組件:
kubelet:主要負責本節點Pod的生命周期管理,定期向Master上報本節點及Pod的基本信息。kubelet會從apiserver接收Pod的創建請求,啟動和停止Pod。
kube-proxy: 實現Kubernetes上Service的通信及負載均衡。kuer-proxy目前有userspace和iptables兩種實現方式。userspace是在用戶空間,通過kuber-proxy實現負載均衡的代理服務。這個是kube-proxy的最初的版本,較為穩定,但是效率不太高。另外一種方式是iptables的方式,在內核空間,是純采用iptables來實現LB,是Kubernetes目前默認的方式。
2) Kubernetes HA部署方案
部署了3個Master節點,每個Master節點的etcd組成集群
3個Master節點上的APIServer的前面放一個負載均衡器,工作節點和客戶端通過這個負載均衡器和APIServer進行通信
scheduler和controller-manager支持leader選舉,能保證在集群中多個實例只有一個工作,其他為備用
二、準備虛擬機軟件和Linux OS
1.虛擬機軟件安裝(VirtualBox6.10)
http://www.lxweimin.com/p/7c1b9c24499d 2
2。Linux OS安裝(Ubuntu20.04)?
http://www.lxweimin.com/p/9f08d6e7c4ab
3。設置虛擬機的處理器數量至少為2
? ? ? ? master節點處理器數量至少為2
? ? ? ? node節點處理器數量可以為1
? ? ? ? 本實驗只需要一個master節點和一個node節點
4.配置windows與ubuntu間的共享目錄
? ? 在Ubuntu20.04中創建share目錄? ??
????人工掛接
????????sudo mount -t vboxsf -o rw,uid=1000,gid=1000 share ~/share
????啟動時自動掛接
????????????sudo vi /etc/fstab
????????????在底下加一句
????????????share /home/zhangwb/share vboxsf rw,gid=1000,uid=1000,auto 0 0
? ? ? ? ? ? 注意目錄/home/zhangwb/share要換成實際的路徑
4.配置國內源
????備份sources.list文件
????$ cd /etc/apt
????$ sudo mv sources.list sources.list.bak
????$ sudo vi /etc/apt/sources.list??
????//插入國內源(將附錄的國內yum源放入到文件中)
????$ sudo apt-getupdate
4.安裝sshd
安裝openssh-server
????????$?sudo apt-get install openssh-server
生成key
????????????運行ssh-keygen生成公鑰文件和私鑰文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub
????????? ??????????ssh-keygen -t rsa
配置authorized_keys
? ???????????????????cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
? ??????????????????cat ~/.ssh/authorized_keys
執行ssh
? ? ? ? ? ? ? ? ssh localhost
三、安裝前配置?
本實驗先安裝好一臺master機器,等所有軟件都安裝好之后,從master復制出來一個虛擬機作為node節點
1.規劃主機名
????規劃主機名稱
????k8s-master
????k8s-node1
????k8s-node2
2.設置主機名
????$ sudo hostnamectl set-hostname "k8s-master"???? // Run this command on masternode
????$ cat /etc/hostname
????k8s-master
????$ sudo hostnamectl set-hostname "k8s-node1"???? // Run this command on node-0
????$ sudo hostnamectl set-hostname "k8s-node2"???? // Run this command on node-1
3.配置?/etc/hosts?
查看ip地址
$ ifconfig
//要是提示沒有安裝包時
$ sudo apt install net-tools
配置/etc/hosts
$ sudo vi /etc/hosts
10.1.13.106??? k8s-master
#10.1.13.107??? k8s-node1
#10.1.13.108??? k8s-node1
將IP替換為實際的ip地址
4.禁用swap
$ sudo swapoff –a
$ sudo vi /etc/fstab
把/etc/fstab包含swap那行記錄#掉。
5.關閉防火墻
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
6.禁用Selinux
$ sudo apt install selinux-utils
$ setenforce 0
7.確保時區和時間正確
$ sudo timedatectl set-timezone Asia/Shanghai
$ sudo systemctl restart rsyslog
$ sudo apt-get install ntpdate –y
$ sudo ntpdate time.windows.com
8.配置net.bridge.bridge-nf-call-iptables
$ cat <
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sudo sysctl --system
9.設置rp_filter的值
$ sudo vi /etc/sysctl.d/10-network-security.conf
#將下面兩個參數的值從2修改為1
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
$ sudo sysctl --system
10.enable IP forwarding on all nodes
$ sudo vi /etc/sysctl.conf
// 找到net.ipv4.ip_forward=1” and un-comment it
$ sudo sysctl -p
net.ipv4.ip_forward = 1
四、安裝docker
1.查看當前安裝的docker版本
$ docker version
2.卸載當前安裝的docker版本(可選)?
$?sudo apt-get remove docker.io
3.查看可安裝的docker版本(可選)?
安裝以下包以使apt可以通過HTTPS使用存儲庫(repository):
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
添加Docker官方的GPG密鑰:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg| sudo apt-key add –
再更新一下apt包索引:
$ sudo apt-get update
列出可用的版本:
$?apt-cache madison docker.io
4.安裝docker
安裝最新版
$ sudo apt install -y docker.io
安裝特定版
sudo apt-get install docker.io=xxx
xxx為apt-cache madison docker.io輸出中第二列完整的信息,如
sudo apt-get install docker.io=19.03.8-0ubuntu1.20.04.1
5.啟動docker
啟動docker
$ sudo systemctl start docker
設置開機自啟動
$ sudo systemctl enable docker
或
$ sudo systemctl enable docker.service --now
6.驗證docker
$ systemctl status docker
$ docker --version
7.重啟docker(當有配置改動后執行)
$ sudo pkill -SIGHUP dockerd
//或者
$ sudo systemctl restart docker
8.配置docker鏡像加速器
獲取加速器地址
訪問www.aliyun.com,支付寶登錄,然后到https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors獲取地址和安裝方法
配置鏡像加速器
通過修改daemon配置文件/etc/docker/daemon.json來使用加速器
$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
? "registry-mirrors": ["https://yyy.mirror.aliyuncs.com"]
}
EOF
yyy為上一步中阿里云展示的加速域名前綴
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
五、安裝K8s軟件
1.安裝最新版本
$ sudo apt-get update && sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl
$ curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo tee /etc/apt/sources.list.d/kubernetes.list <
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
$ sudo apt-get update
//安裝最新版本
$ sudo apt-get install -y kubelet kubeadm kubectl
2.刪除已安裝版本
kubeadm version
sudo apt-get remove -y --allow-change-held-packages kubeadm?kubectl?kubelet?kubernetes-cn
3.查詢k8s可安裝的版本:
apt-cache madison kubeadm
apt-cache madison kubelet
apt-cache madison kubectl
apt-cache madison kubernetes-cni
4.安裝指定的k8s版本
sudo apt-get install -y?kubelet=1.17.3-00?kubectl=1.17.3-00?kubernetes-cni=0.8.7-00?kubeadm=1.17.3-00
5.設置不隨系統更新而更新
$ sudo apt-mark hold kubelet kubeadm kubectl
六、克隆nodes節點
1.?關閉虛擬機
$ sudo shutdown now
2. 復制虛擬機
回到Oracle VM VirtualBox主界面,選擇k8s-master,右擊鼠標,點擊復制...
名稱:k8s-node1
路徑:選擇合適的路徑
MAC地址:為所有網卡重新生成MAC地址
下一步,選擇完全復制
3. 重啟虛擬機
? ? k8s-master
? ??k8s-node
4. 重新設置node主機名
????$ sudo hostnamectl set-hostname "k8s-node1"???? // Run this command on node-1
???$ cat /etc/hostname
3.配置?/etc/hosts?
查看ip地址
$ ifconfig
4.配置/etc/hosts
$ sudo vi /etc/hosts
10.1.13.106??? k8s-master
10.1.13.107??? k8s-node1
七、初始化master(k8s-master節點上執行)
$ sudo kubeadm init --kubernetes-version=v1.17.3 --pod-network-cidr 10.244.0.0/16 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
注:
? ??????--kubernetes-version=v1.17.3 當安裝的是最新版本時,這個參數可以省略
? ??????--pod-network-cidr 10.244.0.0/16? ? 需要跟當前虛擬機的ip地址處于不同網段(ifconfig參考),并且與下面的網絡插件參數設置要一致(calico.yaml中的CALICO_IPV4POOL_CIDR(原始值192.168.0.0/16))
? ? ? ? 執行成功后,會出現如下提示
?執行?
? mkdir -p $HOME/.kube
? sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
? sudo chown $(id -u):$(id -g) $HOME/.kube/config
? ?kubectl get node
八、將node節點加入
在所有node節點上執行
sudo kubeadm join 192.168.3.164:6443 --token qqfpor.kxmumjmjnssqtg0o --discovery-token-ca-cert-hash sha256:20a02a32f27c13b4dddec7b4435370805c5bfd44186fbd25c9175a714e1e380e
其中:
192.168.3.164:6443 為master節點ip地址和端口
--token qqfpor.kxmumjmjnssqtg0o
? ? 這個參數可以通過在master上執行:kubeadm token list獲得
--discovery-token-ca-cert-hash sha256:20a02a32f27c13b4dddec7b4435370805c5bfd44186fbd25c9175a714e1e380e
? ? 這個參數可以通過在master上執行:openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'? ? ? ? ? ?獲得
? ?kubectl get node
等裝好網絡插件就會Ready了
九、安裝網絡插件(calico)
#下載
https://docs.projectcalico.org/v3.11/manifests/calico.yaml
vi calico.yaml
#修改CALICO_IPV4POOL_CIDR,為10.244.0.0/16(要與kubeadm inti中的--pod-network-cidr 10.244.0.0/16參數保持一致,默認為192.168.0.0/16)
然后
$ kubectl apply -f calico.yaml
kubectl get node
需要等待一會,中間可以通過執行以下命令來查看pod是否全部ready
kubectl get pod -n kube-system
十、驗證
1.創建nginxdeployment
$ kubectl create deployment nginx-web --image=nginx
2.獲取pod列表
$ kubectl get pod -o wide
3.測試nginx
curl http://10.244.36.65