deployment介绍和使用

什么是deployment

deployment是对pods和ReplicaSet的定义,定义了pods和ReplicaSet的定义和实现方式等。
如下为deployment的定义

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.12.2
        ports:
        - containerPort: 80

metadata 指明了服务名为nginx-deployment, 标签为nginx, 

spec指定了pod的副本为3个,每个pod容器镜像为ngix:1.12.2, 容器端暴漏的端口为80
接下来我们启动deployment

kubectl create -f deployment_nginx.yml

会显示:”nginx-deployment deployment has been created” 

我们执行

kubectl get deployment

查看deployment状态 

NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE  AGE  
nginx-deployment      3          3        3            3        9s

可以看到deployment启动了三个pod,并且三个pod都是可用的。 

kubectl get rs

可以看到ReplicaSet的状态为启动了3个pod,都是就绪状态 

接下来可以查看下pod

kubectl get pods

显示deployment详细信息 

kubectl get deployment -o wide

我们也可以更新deployment的image 

kubectl set image deployment nginx-deployment nginx=nginx:1.1.13

我们可以回滚deployment版本 

kubectl rollout undo deployment nginx-deployment

查看deployment的历史信息 

kubectl rollout history deployment nginx-deployment

将deployment服务暴露出去 

kubectl expose deployment nginx-deployment --type=NodePort

终端会提示服务已经暴露出去 

service nginx-deployment  exposed

我们接下来查看下service信息 

kubectl get svc

会显示服务映射的端口和地址 

安装kubeadm

基于ubuntu配置k8s环境

hostnamectl set-hostname k8s-master

设置好后可以查看下我们的配置 

tail /etc/hosts

查看防火墙状态 

sudo apt-get install ufw

关闭临时分区 

swapoff -a

更新https 

apt-get update && apt-get install -y apt-transport-https

获取gpg 

curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

新增源 

add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"

更新apt

apt-get update

查看1.15最新版本

apt-cache madison kubelet kubectl kubeadm |grep '1.15.4-00'         //查看1.15的最新版本

安装指定版本的工具 

apt install -y kubelet=1.15.4-00 kubectl=1.15.4-00 kubeadm=1.15.4-00        //安装指定的版本

kubelet禁用swap 

tee /etc/default/kubelet <<-'EOF'
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF

systemctl daemon-reload && systemctl restart kubelet

 初始化k8s

kubeadm init \
  --kubernetes-version=v1.15.4 \
  --image-repository registry.aliyuncs.com/google_containers \
  --pod-network-cidr=10.24.0.0/16 \
  --ignore-preflight-errors=Swap

在当前账户下执行,kubectl配置调用

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

使用fannel的overlay网络实现多节点pod通信 

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

查看pods信息 

kubectl get pods -A

配置dashboard 

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml

配置后查看pod信息

get pods -A

查看namespaces信息

kubectl get namespaces

可以查看所有的namespaces信息 

设置好网络模式后,接下来查看下apiserver暴露的地址

kubectl cluster-info

显示如下

Kubernetes master is running at https://172.17.0.9:6443
Heapster is running at https://172.17.0.9:6443/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://172.17.0.9:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
monitoring-grafana is running at https://172.17.0.9:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
monitoring-influxdb is running at https://172.17.0.9:6443/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy

如果外网访问,换成外网地址就行了。 

我自己dashboard的访问地址:

https://81.68.86.146:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

因为访问dashboard需要权限 

1.创建服务账号
首先创建一个叫admin-user的服务账号,并放在kube-system名称空间下:

# admin-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

执行kubectl create命令: 

kubectl create -f admin-user.yaml

2.绑定角色 

默认情况下,kubeadm创建集群时已经创建了admin角色,我们直接绑定即可:

# admin-user-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

执行kubectl create命令: 

kubectl create -f  admin-user-role-binding.yaml

3.获取Token 

现在我们需要找到新创建的用户的Token,以便用来登录dashboard:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $
1}')

4 制作证书 

k8s默认启动了证书验证,我们创建证书

# 生成client-certificate-data
grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
# 生成client-key-data
grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
# 生成p12
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

然后我们将kubecfg.p12 copy到windows双击安装证书即可。 

然后chrome 打开地址:

https://81.68.86.146:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

单节点k8s,默认pod不被调度在master节点,需要设置去污点

kubectl taint nodes --all node-role.kubernetes.io/master-     //去污点,master节点可以被调度

输出如下

node/k8s-master untainted

感谢关注我的公众号

 

 

### 配置与管理VSCode中的部署 #### 使用Web Deploy机制进行部署 为了在托管系统上发布应用程序,推荐的方法是使用Web Deploy技术。通过Visual Studio集成环境可以简化这一过程,使得开发者能够更便捷地将应用部署到指定文件夹中[^1]。 对于希望利用VSCode执行相似功能的情况而言,虽然官方文档主要围绕着Visual Studio展开描述,但是借助于一些扩展工具以及命令行接口同样可以在VSCode环境下实现相同效果。例如安装`ms-vscode.vscode-node-deployment`插件来辅助完成FTP/SFTP上传任务;或是采用Azure App Service Extension支持基于云平台的服务端部署工作流。 #### 修改项目配置以适应自定义构建流程 当涉及到调整项目的编译行为以便更好地适配特定的持续集成/交付(CI/CD)管道时,则可能需要编辑`.csproj`文件来进行定制化设置。具体来说,在解决方案资源管理器内右键单击目标工程并选择“卸载项目”,之后再次点击该项目名并选取“编辑[项目名称].csproj”。在此过程中可以根据实际需求引入外部的目标文件或者覆盖默认的任务逻辑,从而满足多样化的开发场景下的自动化部署要求[^2]。 需要注意的是上述操作适用于.NET Core及以上版本的新式SDK风格工程项目结构下实施更为简便有效。 #### 利用Docker容器镜像配合Kubernetes集群服务(GKE) 如果考虑更加现代化的应用程序架构设计模式——微服务体系结构的话,那么创建一个包含应用程序代码在内的Docker映像,并将其推送至Google Kubernetes Engine可访问的存储库就成为了首要步骤之一。随后编写一份YAML格式的资源配置清单提交给GKE实例,指明所使用的容器镜像以及其他必要的运行参数信息即可让后者负责后续的一切启动准备工作直至最终成功上线业务组件[^3]。 尽管这部分内容并非直接关联于VSCode本身的功能特性介绍范畴之内,但对于那些计划在其内部集成本地调试、远程连接等功能于一体的全栈工程师们来讲无疑提供了另一种值得探索的方向。 ```bash docker build -t gcr.io/[PROJECT-ID]/my-app:v1 . gcloud docker -- push gcr.io/[PROJECT-ID]/my-app:v1 kubectl apply -f k8s-manifest.yaml ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋风辰

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值