1. 程式人生 > 其它 >k8s叢集部署及部署容器化應用

k8s叢集部署及部署容器化應用

因為部門oa系統是多租戶形式的部署在k8s中,平常只是解決k8s的一些常見錯誤,一直想認真研究一下 k8s的部署過程,畢竟知道其中的部署過程後邊解決問題才能更快的解決,所以就找時間研究了一下。

一、k8s常用元件

master節點四個元件:apiserver、etcd、controllers、scheduler
nodes 節點三個元件:kubelet、kube-proxy、container runtime

二、環境安裝準備工作

1、關閉防火牆

systemctl stop friewalld
systemctl disable friewalld

2、關閉selinux(安全機制)

sed -i 's/enforcing/disabled/' /etc/selinux/config #永久
setenforce 0 #臨時

3、關閉swap(k8s禁止虛擬記憶體以提高效能)

sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
swapoff -a #臨時

free -m #如果swap全為0,表示已經關閉

4、在master新增hosts

兩種方式
a、文字輸出到hosts檔案

cat >> /etc/hosts <<EOF
master節點ip master
nodes節點ip nodes
EOF

b、直接vim

vim /etc/hosts
master節點ip master
nodes節點ip nodes

5、設定網橋引數

cat > /etc/sysctl.d/k8s <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #生效

6、保證時間同步

yum -y install ntpdate
ntpdate time.windows.com

修改linux系統的時間EDT為CST(時區修改方法)
————————————————————————————
a、mv /etc/localtime /etc/localtime.bak
b、ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
c、date
————————————————————————————

三、使用kubeadm部署k8s

搭建docker

1、更新docker的yum源(主從節點同時操作)

wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo #將前面的那個檔案下下來寫到後邊這個檔案中

安裝docker(主從節點同時操作)

yum -y install docker-ce-19.03.13

配置docker 加速器(主從節點同時操作)

/etc/docker/daemon.json (沒有則新建)

{
"registry-mirrors" : ["https://registry.docker-cn.com"]
}

開啟docker開機自啟(主從節點同時操作)

systemctl enable docker

搭建kubeadm 、kubelet

2、新增k8s的阿里雲yum源(主從節點同時操作)

cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun. com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3、安裝kubeadm、kubelet和kubectl(主從節點同時操作,自己選擇合適的版本)

yum -y install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4
systemctl enable kubelet.service

檢視是否安裝成功

yum list installed | grep kubeadm
yum list installed | grep kubelet
yum list installed | grep kubectl

檢視k8s版本

kubelet --version

kubelet:執行在cluster所有節點上,負責啟動pod和容器
kubeadm:用於初始化cluster的一個工具
kubectl:kubectl是kubenetes命令列工具,通過kubectl可以部署和管理應用,檢視各種資源,建立,刪除和更新元件;

4、部署kubernetes Master 節點(master 機器執行)

kubeadm init --apiserver-advertise-address=192.168.125.128
--image-repository=registry.aliyuncs.com/google_containers
--kubernetes-version=v1.19.4
--service-cidr=10.96.0.0/12
--pod-network-cidr=10.244.9.0/16

--apiserver-advertise-address= :後邊跟master主機ip;
--image-repository :後邊跟映象地址,這邊採用阿里雲;
--kubernetes-version :k8s版本(kubelet --version);
--service-cidr= : 選取不能割PodCIDR及本機網路有重疊或者衝突,一般可以選擇一個本機網路和PODCIDR都沒有用到的私網地址段,比如PODCIDR使用10.244.0.0/16,那麼--service-cidr可以選擇10.86.0.0/12,網路無重疊衝突即可;
後邊兩個可以直接複製,不做修改

docker images檢視init後拉取的映象

接下來執行:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config``

5、將node節點加入主節點(在node節點機器)

主節點 kubeadm init成功後會生成一個kubeadm join 命令,複製到node節點執行

**格式:

kubeadm join --token <token> <master-ip>:<master-port(6443)> --discovery-token-ca-cert-hash sha256:<hash>**


如果找不到進行一下操作:

token檢視,在master所在機器上執行:

kubeadm token list

預設情況下,token的有效期是24小時,如果token已經過期的話,執行:

kubeadm token create

如果找不到hash可以執行:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

6、打通master、node聯絡,部署網路查件(master幾點操作)

kubectl get nodes

檢視節點狀態會發現節點未就緒執行下面兩條命令

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

稍微等一會 執行kubectl get nodes 會看到節點status狀態變成READY**

檢視kubelet中系統的 那些pod

kubectl get pods -n kube-system

四、kubenetes 部署容器化應用

在叢集中部署一個nginx

kubectl create deployment nginx --image=nginx #拉取一個nginx映象
kubectl get pod -o wide #檢視nginx 是否拉取成功,在那個節點

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-KNvKZDnO-1618234693253)(en-resource://database/871:1)]
可以到節點上執行docker images 看到新拉取的nginx 映象


kubectl expose deployment nginx --port=80 --type=NodePort #暴露nginx 埠

暴露後 執行kubectl get svc 會看到新增一個service
deployment:控制器nginx:自己隨便起一個名字
--image:執行一個映象
latest:版本
--port:暴露埠
--type:型別

部署微服務基本流程
1、專案打包( jar、war ) -->可以採用一-些工具git、maven、 jenkins
2、製作Dockerfile檔案,生成映象;
3、kubectl create deployment 映象名稱 --image=你的映象


控制器、pod、docker三者之間的關係