k8s部署docker容器的实现

k8s部署docker容器的实现是一项比较复杂的工作,需要一定的专业知识和技巧。下面我将为您详细介绍这个过程的完整攻略。

准备工作

在开始部署前,我们需要做一些准备工作:

  1. 安装docker和kubectl工具
# 安装docker
sudo apt-get update
sudo apt-get install docker.io -y

# 配置docker镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://dockerhub.azk8s.cn"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

# 安装kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
  1. 配置kubernetes环境
# 安装kubeadm、kubelet和kubectl
# 具体版本根据个人需求来定
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 启动kubernetes集群
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

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

# 安装网络插件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
  1. 部署kubernetes dashboard(可选)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

部署docker容器

编写deployment.yaml

我们可以通过编写deployment.yaml文件来描述我们需要部署的docker容器,下面是一个示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  labels:
    app: web
spec:
  replicas: 3 # 副本数
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: nginx # docker镜像
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html # 挂载目录
      volumes:
      - name: html
        configMap:
          name: web-html # 配置文件名

创建configmap

我们需要通过创建configmap,将我们的容器所需的配置文件传递到容器内。这里我们示范传递一个index.html文件。

echo "<html><body><h1>Hello, World!</h1></body></html>" > index.html
kubectl create configmap web-html --from-file=index.html

部署deployment

kubectl apply -f deployment.yaml

部署后检查

kubectl get deployments
kubectl get pods
kubectl describe deployment web
kubectl describe pod <pod-name>
kubectl port-forward <pod-name> 8080:80 # 将本地8080端口转发到容器的80端口上

示例1:部署一个Flask应用

编写Dockerfile

我们可以通过编写Dockerfile文件来描述如何构建出我们需要部署的Flask应用,下面是一个示例:

FROM python:3
RUN mkdir -p /app
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app/
EXPOSE 5000
CMD ["python", "app.py"]

编写deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flask-app
  template:
    metadata:
      labels:
        app: flask-app
    spec:
      containers:
      - name: flask-app
        image: flask-app # 镜像名
        imagePullPolicy: Never # 不从镜像仓库拉取镜像
        ports:
          - containerPort: 5000
        volumeMounts:
          - name: app-volume
            mountPath: /app
      volumes:
        - name: app-volume
          configMap:
            name: flask-app-config

创建configmap

我们需要通过创建configmap,将我们的容器所需的index.html文件传递到容器内。

echo "Hello, Flask!" > hello.txt
kubectl create configmap flask-app-config --from-file=hello.txt

部署deployment

kubectl apply -f deployment.yaml

部署后检查

kubectl get deployments
kubectl get pods
kubectl describe deployment flask-app
kubectl describe pod <pod-name>
kubectl port-forward <pod-name> 8080:5000

示例2:部署一个基于Node.js的Web应用

编写Dockerfile

我们可以通过编写Dockerfile文件来描述如何构建出我们需要部署的Node.js应用,下面是一个示例:

FROM node:10
RUN mkdir -p /app
WORKDIR /app
COPY package*.json /app/
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

编写deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: node-web
  template:
    metadata:
      labels:
        app: node-web
    spec:
      containers:
      - name: node-web
        image: node-web # 镜像名
        imagePullPolicy: Never # 不从镜像仓库拉取镜像
        ports:
          - containerPort: 3000
        volumeMounts:
          - name: app-volume
            mountPath: /app
      volumes:
        - name: app-volume
          configMap:
            name: node-web-config

创建configmap

我们需要通过创建configmap,将我们的容器所需的package.json和app.js文件传递到容器内。

echo "{
  \"name\": \"node-web\",
  \"version\": \"1.0.0\",
  \"description\": \"\",
  \"main\": \"app.js\",
  \"dependencies\": {
    \"express\": \"^4.17.1\"
  },
  \"author\": \"\",
  \"license\": \"ISC\"
}" > package.json

echo "const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})
" > app.js

kubectl create configmap node-web-config --from-file=package.json --from-file=app.js

部署deployment

kubectl apply -f deployment.yaml

部署后检查

kubectl get deployments
kubectl get pods
kubectl describe deployment node-web
kubectl describe pod <pod-name>
kubectl port-forward <pod-name> 8080:3000

以上就是k8s部署docker容器的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:k8s部署docker容器的实现 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Odoo安装之docker部署

    本次介绍一下odoo在docker上的安装部署 安装docker docker在windows和mac上一般都用desktop版,方便操作,Linux上用命令行版即可。windowshttps://docs.docker.com/docker-for-windows/install/machttps://docs.docker.com/docker-for-…

    Docker 2023年4月13日
    00
  • ubuntu 18.04 docker安装

    docker安装后不能正常启动,报错如下 $ sudo docker image ls Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? systemctl status docker.service ● dock…

    Docker 2023年4月11日
    00
  • Ubuntu下安装配置Docker的教程详解

    Ubuntu下安装配置Docker的教程详解 安装Docker 更新apt软件包: sudo apt-get update 安装Docker的前置软件包: sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 添加Docker的GPG密…

    Docker 2023年5月15日
    00
  • Docker run 命令的使用方法详解

    “Docker run 命令的使用方法详解”是一篇介绍Docker运行容器的文章,下面是完整攻略: Docker run 命令的使用方法详解 什么是Docker run命令? Docker是一种容器化技术,Docker run命令用于在Docker中创建和运行容器。通过Docker run命令,可以快速创建一个可以运行的容器,并在其中安装和运行所需的应用程序…

    Docker 2023年5月16日
    00
  • NACOS DOCKER 官方镜像启动失败 No Datasource set

    1.4.0 解决 官方文档的环境变量是错的官方 Nacos Docker 快速开始 其中 MYSQL_MASTER_SERVICE_HOST mysql 主节点host MYSQL_MASTER_SERVICE_PORT mysql 主节点端口 default : 3306 MYSQL_MASTER_SERVICE_DB_NAME mysql 主节点数据库 …

    Docker 2023年4月12日
    00
  • RunnerGo可视化场景管理,还原真实场景

    在进行性能测试时,测试场景的正确配置非常关键。首先,需要根据业务场景和需求,设计出合理的测试场景,再利用相应的工具进行配置,实现自动化的性能测试。 在JMeter中,用户需要自己组织测试场景,或是在同一文件中维护多个测试场景,而且每个测试场景必须单独设置各种元素,并且执行测试场景也需要手动控制,而在RunnerGo中,测试场景所有构件都可以在平台上用GUI来…

    2023年4月8日
    00
  • 使用docker搭建一套开发环境全家桶的详细教程

    使用Docker搭建一套开发环境全家桶的详细攻略: 步骤一:安装Docker 在官方网站 https://www.docker.com/ 下载适合您系统的Docker安装程序。 按照安装程序的提示一步一步安装即可。 步骤二:选择需要的开发环境 Docker可以构建各种各样的开发环境。在这里我们选择两个常见的。 示例1:Python开发环境 我们将使用Dock…

    Docker 2023年5月16日
    00
  • 从零开始docker部署flask

    1、下载一个Ubuntu镜像 2、启动镜像,使用apt-get安装python、安装pip,建议也装个vim吧 3、通过以上的容器生成一个新的镜像,命令如下docker commit afcaf46e8305 os-flask 4、写个基于falsk的hello.py,切记host一定要指定为0.0.0.0,不然端口后外面也无法访问 from flask i…

    Docker 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部