0
点赞
收藏
分享

微信扫一扫

minikube演示kubernetes应用部署与升级扩容

正义的杰克船长 2022-04-13 阅读 99

minikube演示kubernetes应用部署与水平伸缩

新建虚机

工具:VMWare WorkStation 16

虚机镜像:CentOS-7-x86_64-Minimal-2009.iso

安装kubectl/kubeadm/kubelet

参考文章:https://www.cnblogs.com/zhaopengcheng/p/13582933.html

1 yum 源修改为国内

// 备份本地yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak 

// 获取阿里yum源配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
// 或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

// 更新catch
yum clean all # 清除系统所有的yum缓存 
yum makecache # 生成yum缓存

// 查看
yum -y update 

// 调整时区为上海
timedatectl set-timezone Asia/Shanghai

2 使用本地软件包管理软件安装 kubectl 二进制文件

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

若安装的时候密钥出问题,可以不配置密钥

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

3 查看可安装的版本

[root@localhost ~]# yum list kubectl –showduplicates
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                                                                                                   | 3.6 kB  00:00:00     
extras                                                                                                                                 | 2.9 kB  00:00:00     
kubernetes                                                                                                                             | 1.4 kB  00:00:00     
updates                                                                                                                                | 2.9 kB  00:00:00     
kubernetes/primary                                                                                                                     | 107 kB  00:00:00     
kubernetes                                                                                                                                            785/785
可安装的软件包
kubectl.x86_64                                                               1.23.5-0                                                               kubernetes

4 yum方式安装kubectl

开始安装 kubelet kubeadm kubectl
$ yum install -y kubelet kubeadm kubectl

设置开机启动
$ systemctl enable kubelet && systemctl start kubelet

设置路由策略
lsmod | grep br_netfilter

使桥接流量对iptables可见

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

关闭swap
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo swapoff -a
验证是否生效,均返回 1 即正确
sysctl -n net.bridge.bridge-nf-call-iptables
sysctl -n net.bridge.bridge-nf-call-ip6tables
echo "1" >/proc/sys/net/ipv4/ip_forward
 

5 防火墙相关

关闭防火墙

sudo systemctl stop firewalld.service   #停止firewall
sudo systemctl disable firewalld.service #禁止firewall开机启动
sudo firewall-cmd --state             #查看防火墙状态

禁用SELINUX

sudo setenforce 0
sudo vi /etc/selinux/config
#SELINUX修改为disabled
SELINUX=disabled 

5 升级内核为 5.4 版本

更新yum源
yum -y update

获取源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
 
安装,装完成后检查 /boot/grub2/grub.cfg中对应内核menuentry中是否包含 initrd16 配置,如果没有,再安装一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt 
 
查看系统的全部内核
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

[root@localhost ~]# sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.4.186-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.59.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-544699b73b79426492ac4e2497d05751) 7 (Core)
设置开机从新内核启动
grub2-set-default 0
生成grub配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.186-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-5.4.186-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.59.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.59.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-544699b73b79426492ac4e2497d05751
Found initrd image: /boot/initramfs-0-rescue-544699b73b79426492ac4e2497d05751.img
done

重启使配置有效
reboot

查看正在使用的内核
uname -r

[root@localhost ~]# uname -r
5.4.186-1.el7.elrepo.x86_64

6 安装 docker-ce,国内阿里仓库安装

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装最新版本的 Docker Engine-Community 和 containerd

$ sudo yum install docker-ce docker-ce-cli containerd.io

将普通用户可以执行docker命令

创建docker 用户组
sudo groupadd docker

普通用户加入docker用户组
sudo usermod -aG docker ${USER}
启动docker
sudo systemctl restart docker
## Create /etc/docker
mkdir /etc/docker
# Set up the Docker daemon
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# Restart Docker
systemctl daemon-reload
systemctl restart docker

# 开机启动docker
systemctl enable docker

7 查看kubeadm、kubectl、kubelet 版本命令

[root@localhost ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:57:37Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
[root@localhost ~]# kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:58:47Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
[root@localhost ~]# kubelet --version
Kubernetes v1.23.5

8 初始化master集群

kubeadm init --kubernetes-version=1.23.5 \
--apiserver-advertise-address=172.25.6.126 \
--ignore-preflight-errors=all \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

安装Minikube

参考官方文档:minikube start | minikube (k8s.io)

1 安装

[root@localhost ~]# curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 69.2M  100 69.2M    0     0  3205k      0  0:00:22  0:00:22 --:--:-- 3856k
[root@localhost ~]# sudo install minikube-linux-amd64 /usr/local/bin/minikube

2 启动

[huoxinli@localhost root]$ minikube start --driver=docker
[huoxinli@localhost root]$ minikube start --driver=docker
* Centos 7.9.2009 上的 minikube v1.25.2
* 根据用户配置使用 docker 驱动程序
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
* Downloading Kubernetes v1.23.3 preload ...
    > preloaded-images-k8s-v17-v1...: 505.68 MiB / 505.68 MiB  100.00% 3.40 MiB
    > index.docker.io/kicbase/sta...: 379.06 MiB / 379.06 MiB  100.00% 129.47 K
! minikube was unable to download gcr.io/k8s-minikube/kicbase:v0.0.30, but successfully downloaded docker.io/kicbase/stable:v0.0.30 as a fallback image
* Creating docker container (CPUs=2, Memory=2200MB) ...
! This container is having trouble accessing https://k8s.gcr.io
* To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
* 正在 Docker 20.10.12 中准备 Kubernetes v1.23.3…
  - kubelet.housekeeping-interval=5m
  - Generating certificates and keys ...
  - Booting up control plane ...
  - Configuring RBAC rules ...
* Verifying Kubernetes components...
  - Using image gcr.io/k8s-minikube/storage-provisioner:v5
* Enabled addons: default-storageclass, storage-provisioner
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

应用部署与升级扩容等功能实践

1 查看集群、节点信息及创建namespace实现资源隔离

// 查看集群信息
$ kubectl cluster-info
// 获取节点信息
$ kubectl get nodes
// 查看hostname
$ hostname

// 创建namespace
$ kubectl create namespace cindy
// 查看namespace
$ kubectl get namespaces

2 部署应用 升级与扩容

部署应用

// 下载一个yaml文件用于部署
[huoxinli@control-plane ~]$ curl -LO https://k8s.io/examples/application/deployment.yaml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   178  100   178    0     0     65      0  0:00:02  0:00:02 --:--:--    65
100   371  100   371    0     0     72      0  0:00:05  0:00:05 --:--:--   279

// 查看
[huoxinli@control-plane ~]$ cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

// 部署 apply一个deployment
[huoxinli@control-plane ~]$ kubectl apply -f deployment.yaml 
deployment.apps/nginx-deployment created

// 在指定的namespace中部署应用
[huoxinli@control-plane ~]$ kubectl apply -f deployment.yaml -n cindy

// 查看deployments
[huoxinli@control-plane ~]$ kubectl get deployments
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           44s

// 查看详情
[huoxinli@control-plane ~]$ kubectl describe deployment nginx-deployment
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Thu, 24 Mar 2022 14:54:38 +0800
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=nginx
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.14.2
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-9456bbbf9 (2/2 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  100s  deployment-controller  Scaled up replica set nginx-deployment-9456bbbf9 to 2

升级应用

// 升级nginx-deployment
// 1 先下载对应的update的yaml文件
[huoxinli@control-plane ~]$ curl -LO https://k8s.io/examples/application/deployment-update.yaml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   178  100   178    0     0    115      0  0:00:01  0:00:01 --:--:--   115
100   368  100   368    0     0     88      0  0:00:04  0:00:04 --:--:--   163

// 2 查看deployment-update.yaml文件的情况
[huoxinli@control-plane ~]$ cat deployment-update.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1 # Update the version of nginx from 1.14.2 to 1.16.1
        ports:
        - containerPort: 80
        
// 3 apply这个升级版本的deployment
[huoxinli@control-plane ~]$ kubectl apply -f deployment-update.yaml 
deployment.apps/nginx-deployment configured

// 4 查看详情
[huoxinli@control-plane ~]$ kubectl describe deployment nginx-deployment
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Thu, 24 Mar 2022 14:54:38 +0800
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 2
Selector:               app=nginx
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.16.1
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-ff6655784 (2/2 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  4m53s  deployment-controller  Scaled up replica set nginx-deployment-9456bbbf9 to 2
  Normal  ScalingReplicaSet  66s    deployment-controller  Scaled up replica set nginx-deployment-ff6655784 to 1
  Normal  ScalingReplicaSet  23s    deployment-controller  Scaled down replica set nginx-deployment-9456bbbf9 to 1
  Normal  ScalingReplicaSet  23s    deployment-controller  Scaled up replica set nginx-deployment-ff6655784 to 2
  Normal  ScalingReplicaSet  21s    deployment-controller  Scaled down replica set nginx-deployment-9456bbbf9 to 0
  
升级与回滚命令 (二)

需要已知镜像版本或者已知镜像

kubectl set image deployment.apps/nginx-deployment nginx=nginx:1.16.1
kubectl set image deployment.apps/nginx-deployment nginx=nginx:1.14.2
kubectl rollout undo deployment nginx-deployment
记录版本以便查看版本及回退到指定版本
// 部署应用时记录版本
$ kubectl apply -f deployment.yaml --record

// 查看历史版本
$ kubectl rollout history deployment nginx-deployment

// 回退到指定版本
$ kubectl rollout undo deployment nginx-deployment --to-revision=3

// 查看deployment的状态
kubectl rollout status deployment nginx-deployment

扩容

// 扩容
// 1 扩容 niginx-deployment
[huoxinli@control-plane ~]$ curl -LO https://k8s.io/examples/application/deployment-scale.yaml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   178  100   178    0     0     77      0  0:00:02  0:00:02 --:--:--    77
100   350  100   350    0     0     96      0  0:00:03  0:00:03 --:--:--   664

// 2 查看
[huoxinli@control-plane ~]$ cat deployment-scale.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 4 # Update the replicas from 2 to 4
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

// 3 apply 扩容的deployment
[huoxinli@control-plane ~]$ kubectl apply -f deployment-scale.yaml 
deployment.apps/nginx-deployment configured

// 4 查看详情
[huoxinli@control-plane ~]$ kubectl describe deployment nginx-deployment
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Thu, 24 Mar 2022 14:54:38 +0800
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 3
Selector:               app=nginx
Replicas:               4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.14.2
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-9456bbbf9 (4/4 replicas created)
Events:
  Type    Reason             Age                  From                   Message
  ----    ------             ----                 ----                   -------
  Normal  ScalingReplicaSet  4m34s                deployment-controller  Scaled up replica set nginx-deployment-ff6655784 to 1
  Normal  ScalingReplicaSet  3m51s                deployment-controller  Scaled down replica set nginx-deployment-9456bbbf9 to 1
  Normal  ScalingReplicaSet  3m51s                deployment-controller  Scaled up replica set nginx-deployment-ff6655784 to 2
  Normal  ScalingReplicaSet  3m49s                deployment-controller  Scaled down replica set nginx-deployment-9456bbbf9 to 0
  Normal  ScalingReplicaSet  40s                  deployment-controller  Scaled up replica set nginx-deployment-9456bbbf9 to 1
  Normal  ScalingReplicaSet  40s                  deployment-controller  Scaled up replica set nginx-deployment-ff6655784 to 4
  Normal  ScalingReplicaSet  40s                  deployment-controller  Scaled down replica set nginx-deployment-ff6655784 to 3
  Normal  ScalingReplicaSet  39s (x2 over 8m21s)  deployment-controller  Scaled up replica set nginx-deployment-9456bbbf9 to 2
  Normal  ScalingReplicaSet  32s                  deployment-controller  Scaled down replica set nginx-deployment-ff6655784 to 2
  Normal  ScalingReplicaSet  29s (x4 over 32s)    deployment-controller  (combined from similar events): Scaled down replica set nginx-deployment-ff6655784 to 0
水平伸缩方式(二)
 kubectl scale deployment.apps/nginx-deployment --replicas=2
 kubectl scale deployment.apps/nginx-deployment --replicas=4

期间 观察deployments变化:

$ kubectk get --watch deployment

在这里插入图片描述

删除应用

[huoxinli@control-plane ~]$ kubectl delete deployments nginx-deployment
deployment.apps "nginx-deployment" deleted
[huoxinli@control-plane ~]$ kubectl get deployments
No resources found in default namespace.

Ending~

举报

相关推荐

0 条评论