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日

相关文章

  • 宿主机网络中其它机器与Docker容器网络互通配置

    前言 目前项目采用微服务架构进行开发,Nacos和其它服务部署到Docker中,Docker中容器采用的网络默认是桥接模式(Bridge),默认的子网码是172.17.0.1/16;宿主机是192.168.1.231;同宿主机其它网络也是192.168.1.39;同事提出本地机器想与Docker中容器互通,访问方式如下:本地机器直接ping 容器IP(172…

    Docker 2023年4月12日
    00
  • docker的基本安装和简单使用+Dockerfile常用指令

    Centos7.6  1.配置docker的yum源,可以使用阿里云的https://yq.aliyun.com/articles/110806sudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager –add-repo http://mi…

    Docker 2023年4月13日
    00
  • 如何给Docker配置官方国内加速镜像

    给 Docker 配置国内加速镜像,可以显著提高 Docker 容器的拉取和构建速度。下面是详细的操作步骤: 第一步:选择镜像加速器 Docker 官方给出了两个合作伙伴的镜像加速器,我们可以从中选择一个来使用。以 阿里云加速器 为例,我们需要先申请一个自己的加速器仓库地址。 第二步:获取加速器仓库地址 在阿里云云服务器 ECS 中,我们可以执行以下命令获取…

    Docker 2023年5月15日
    00
  • docker-compose错误

    1、错误信息: ERROR: for gamehall Get https://hub.tondeen.com/v1/_ping: http: server gave HTTP response to HTTPS client ERROR: Get https://hub.tondeen.com/v1/_ping: http: server gave HTT…

    Docker 2023年4月15日
    00
  • Docker开启远程安全访问的图文教程详解

    下面我来为您详细讲解一下这篇文章的完整攻略。 Docker开启远程安全访问的图文教程详解 简介 本文将详细介绍如何在使用 Docker 时开启远程安全访问,并提供两种示例来帮助您更好地理解。 步骤 修改 Docker daemon.json 文件 首先,使用以下命令找到 Docker 的配置文件 daemon.json: $ sudo find /etc/d…

    Docker 2023年5月15日
    00
  • 查看docker容器的tcp连接(转)

    转:https://blog.liu-kevin.com/2020/05/13/cha-kan-dockerrong-qi-de-tcplian-jie/ 当需要查看tcp连接时,通常使用netstat或ss命令查看,但是查看docker容器的tcp连接存在两个问题 docker容器中无netstat或ss命令 node节点上无法查看容器中的连接 查看doc…

    Docker 2023年4月12日
    00
  • harbor install & docker-compose

    Harbor 下载二进制安装包并编译 wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.3.0.tgz tar vxf harbor-online-installer-v1.3.0.tgz ./prepare 安装工具 docker-compose 安…

    Docker 2023年4月13日
    00
  • Docker中数据卷(volume)管理的两种方式

    Docker中数据卷是一种用于在容器和主机之间共享和保留数据的机制。有两种方式可以管理Docker中的数据卷:命令行管理和Docker Compose管理。以下是它们的详细说明。 命令行管理 创建数据卷 要创建一个数据卷并将其附加到容器上,可以在运行容器时使用-v选项。例如: $ docker run -d -v my-data:/data nginx 在这…

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