Docker安装_k8s集群搭建_架构

安装

官方文档(centos):Install Docker Engine on CentOS | Docker Documentation

删除旧版本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

 设置源仓库

这里设置阿里云

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

安装

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

配置国内镜像加速 

vim /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://sopn42m9.mirror.aliyuncs.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com"
    ]
}

启动,测试

systemctl start docker
docker run hello-world
docker ps -a
docker rm -f $(docker ps -a|awk  '/hello-world/{print $1}')

kubernetes集群搭建

环境(关闭防火墙selinux,时间同步):

主机名IP
k8s-master192.168.126.29
k8s-node1192.168.126.30
k8s-node2192.168.126.31

关闭swap:

swapoff -a # 临时

sed -i 's/.swap./#&/' /etc/fstab # 永久

 将桥接的IPv4流量传递到iptables的链(三台主机统一操作)

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

master免密登录其它节点(master操作)

# 创建密钥
ssh-keygen -t rsa # 一直回车

# 分发密钥
ssh-copy-id -i .ssh/id_rsa.pub root@k8s-node1
ssh-copy-id -i .ssh/id_rsa.pub root@k8s-node2

安装Docker/kubeadm/kubelet(三台统一)

安装docker

vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"exec-opts":["native.cgroupdriver=systemd"]
}
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O
/etc/yum.repos.d/docker-ce.repo

yum -y install docker-ce-19*
systemctl enable docker && systemctl start docker
docker --version

添加阿里云源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

配置安装k8s需要的yum源

vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enabled=1

yum clean all
yum makecache fast

安装kubeadm,kubelet和kubectl

yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
systemctl enable kubelet

配置Kubernetes master结点(主结点操作)

初始化配置(复制输出最内容后一行)

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

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

将主节点中的/etc/kubernetes/admin.conf文件拷贝到从节点相同目录下 

scp /etc/kubernetes/admin.conf  192.168.126.30:/etc/kubernetes/admin.conf
scp /etc/kubernetes/admin.conf  192.168.126.31:/etc/kubernetes/admin.conf

配置环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

 安装Pod网络插件

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

 从节点加入集群

kubeadm join 192.168.126.29:6443 --token onrz40.vmhu3bbhtjtq8bzr --discovery-token-ca-cert-hash sha256:cf0a20d2fe6ff4c652253b0d8ceaa2ba16f8588ce51e9a551c993f9d9d4a16d7

验证

三台主机查看

k8s架构

组件名称组件作用
ApiServer资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
Etcd一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库,可备份
Scheduler负责集群资源调度,按照预定的调度策略将Pod调度到 相应的node节点上,会收集每个Worker资源的详细信息及运行情况,包括CPU、内存等
ControllerManager负责维护集群的状态,比如程序部署安排、故障检测、 自动扩展、滚动更新等
Kubelet负责维护容器的生命周期,即通过控制docker,来创 建、更新、销毁容器,同时也负责Volume(CVI)和网 络(CNI)的管理
KubeProxy负责提供集群内部的服务发现和负载均衡,它可以代理转发Service的请求到Pod

Ingress

官网图

 

 工作原理(Ingress(Nginx)):

  • 用户编写Ingress规则,说明那个域名对应kubernetes集群中的那个 Service。
  • Ingress控制器动态感知Ingress服务规则的变化,然后生成一段对应的 Nginx的反向代理配置。
  • Ingress控制器会将生成的Nginx配置写入到一个运行着的Nginx服务中,并动态更新。
  • 到此为止,其实真正在工作的就是一个Nginx了,内部配置了用户定义的请求规则。 

Ingress搭建

创建文件夹

mkdir ingress-controller
cd ingress-controller

创建Ingress-nginx文件

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/servicenodeport.yaml
kubectl apply -f ./

创建Ingress-nginx 

 查看ingress-nginx生成的pod,Service(等几秒钟启动) 

创建tomcat-nginx.yaml文件

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


---


apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat-pod
  template:
    metadata:
      labels:
        app: tomcat-pod
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5-jre10-slim
        ports:
        - containerPort: 8080


---


apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx-pod
  clusterIP: None
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80

---


apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
spec:
  selector:
    app: tomcat-pod
  clusterIP: None
  type: ClusterIP
  ports:
  - port: 8080
    targetPort: 8080

 创建nginx tomcat对应的Service和Pod

kubectl create -f tomcat-nginx.yaml

查看Service和Pod 

Http代理 

创建ingress-http.yaml文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-http
spec:
  rules:
  - host: nginx.nebula.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80
  - host: tomcat.nebula.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080

创建ingress

kubectl create -f ingress-http.yaml

在master的hosts文件中添加如下的规则 

192.168.126.29 nginx.nebula.com
192.168.126.29 tomcat.nebula.com

查看ingress-nginx的端口 

 Https代理

生成证书

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/O=nginx/CN=nebula.com"

创建密钥

kubectl create secret tls tls-secret --key tls.key --cert tls.crt

 创建ingress-https.yaml文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-https
spec:
  tls:
    - hosts:
      - nginx.nebula.com
      - tomcat.nebula.com
      secretName: tls-secret
  rules:
  - host: nginx.nebula.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80
  - host: tomcat.nebula.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080

创建https ingress

kubectl create -f ingress-https.yaml

 查看

kubectl get ingress ingress-https

 结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建 Docker Kubernetes(K8s)集群,你可以按照以下步骤进行操作: 1. 安装 Docker:在每个节点上安装 Docker,可以按照 Docker 官方文档的指引进行安装。确保所有节点上都安装了相同版本的 Docker。 2. 安装 Kubernetes:可以使用各个操作系统的包管理器(如 apt、yum 等)或者直接下载二进制文件来安装 Kubernetes。你可以参考 Kubernetes 官方文档中的安装指南。 3. 初始化 Master 节点:选择其中一个节点作为 Master 节点,运行以下命令初始化: ``` kubeadm init ``` 这将生成一个 Token 和一个命令,用于其他节点加入集群。 4. 加入 Worker 节点:在其他节点上运行初始化命令生成的加入命令,将它们加入集群。例如: ``` kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash <hash> ``` `<master-ip>` 和 `<master-port>` 是 Master 节点的 IP 地址和端口,`<token>` 和 `<hash>` 是初始化命令生成的 Token 和哈希值。 5. 配置 Kubectl:在你的本地机器上安装并配置 Kubectl,可以按照 Kubernetes 官方文档中的指引进行操作。这将允许你与集群进行交互。 6. 部署应用:使用 Kubernetes 的 YAML 配置文件编写应用的部署描述,并使用以下命令在集群上部署应用: ``` kubectl apply -f <deployment-file> ``` `<deployment-file>` 是应用的部署描述文件的路径。 7. 扩展和管理集群:使用 Kubectl 命令扩展、更新、删除应用,以及管理集群中的节点和资源。例如: - 扩展应用的副本数:`kubectl scale deployment <deployment-name> --replicas=<replica-count>` - 更新应用:`kubectl apply -f <updated-deployment-file>` - 删除应用:`kubectl delete deployment <deployment-name>` - 查看集群状态:`kubectl get nodes`、`kubectl get pods` 等 这些步骤可以帮助你搭建一个简单的 Docker Kubernetes(K8s)集群。你可以根据实际需求进行配置和管理。如果需要更详细的指导,可以参考 Kubernetes 官方文档中的相关内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值