k8s kubernetes 核心笔记 镜像仓库 项目k8s改造

2019/10/24 Chenxin

一 基本资料

一 参考:

https://kubernetes.io/ 官网

https://kubernetes.io/docs/home/ 官网文档

<<kerbernetes 权威指南>> <<每天5分钟玩转k8s>> 图书

aws 和 阿里云 的k8s 集群,请参考对应云知识笔记内容.

二 说明:

docker内容请参考<<Docker 基础>>,<Dockerfile 以及 Docker compose>> 笔记

k8s yaml 配置文件请参考对应单独笔记内容.

k8s 文件说明请参考对应独立笔记内容.

二 k8s常用指令

kubectl get all    # 查看所有
kubectl get all --all-namespaces
kubectl get pods|deployments.|replicasets.|service -o wide
kubectl get nodes --show-labels # 查看node标签 kubectl describe pods|deployments.|replicasets.|service xxx_name
kubectl apply -f xxx.yml kubectl delete pods|deployments.|replicasets.|service xxx_name
kubectl delete -f xxx.yml kubectl edit daemonsets. kube-proxy --namespace=kube-system # 编辑内存里配置文件.应该是及时修改后生效,但测试并未生效
kubectl edit service nginx-svc kubectl logs pod_name # 查看pod内进程输出 (查看最后200行 kubectl logs --tail=200 pod_name 或最后1小时 --since=1h )
kubectl api-versions # 查看k8s当前支持的api版本
kubectl run busybox --rm -it --image=busybox /bin/sh # 临时启用一个工具箱
kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword # 临时启动一个mysql客户端
kubectl apply -f httpd.v1.yml --record # 登记到revision,用于回滚
kubectl rollout history deployment httpd # 查看历史记录,为回滚做准备
kubectl rollout undo deployment httpd --to-revision=1 # 回滚到版本1
kubectl exec mypod-id touch /mydata/hello # 到Pod的container里执行指令
kubectl exec mypod-id df | grep data # 到Pod里执行指令
kubectl create configmap game-config --from-file=docs/gameconfig/ # 目录内含有多个配置文件(每个配置文件里可以有很多内容)
journalctl -l -u kubelet # 查看kubelet日志 kubectl get pods -o yaml # 配置yaml格式详情
kubectl get endpoints # 查看终端服务节点 故障排查主要使用
kubectl logs pod_name # 查看控制台输出(pod运行的报错信息)
kubectl describe pods|deployments.|replicasets.|service xxx_name kubectl top node node1 --v=8 #开启debug模式输出.使用top指令查看资源情况,需部署heapster(1.8之前版本默认提供.之后修改为service-metric).参考https://github.com/helm/charts/tree/master/stable/heapster

自动命令补全额外说明

具体请参考本文档"master命令自动补全"部分.如果失效,需要手动再次 source <(kubectl completion bash )

三 架构+安装服务(master+node)

架构说明

1个master,2个node(192.168为二次实验地址)

k8s-master 10.0.0.105 192.168.143.130

k8s-node1 10.0.0.106 192.168.143.131

k8s-node2 10.0.0.107 192.168.143.132

版本说明

首次测试为k8s的1.13版本,第二次测试为1.16.1版本

操作系统版本说明

k8s只支持centos7.x以上版本.

这里采用系统版本为:

AWS Marketplace的CentOS官方镜像而来(更新时间: 19/1/31) 默认为7.6版本(2018/10).

修改/etc/hostname

更新系统

yum update -y # 更新到最新系统版本

更新iptables(略过)

RHEL7.4无需更新iptables,因为iptables -V -> iptables v1.4.21

配置网络桥接与路由转发

/etc/sysctl.conf 文件增加

net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

安装/启动docker

a.配置yum仓库

b.正式安装

yum install -y docker-ce

docker --version -> Docker version 18.09.2 (首次版本,第二次为Docker version 19.03.3, build a872fc2f86)

c.启动docker

systemctl start docker.service

systemctl enable docker.service

报错解决

Error: Package: 3:docker-ce-18.09.2-3.el7.x86_64 (docker-ce-stable) Requires: container-selinux >= 2.9

到centos官网寻找最新的container-selinux,然后安装,如下

yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.74-1.el7.noarch.rpm

安装k8s的kubeadm, kubelet 和 kubectl

参考: https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/

  • 国内-阿里云
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
  • 国外-配置google的源地址(也可以采用国内阿里云,中科大镜像)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

将 SELinux 设置为 permissive 模式(镜像默认已经将其禁用)

setenforce 0

sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

master+node安装

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # 会自动安装conntrack-tools cri-tools ebtables socat等依赖包

添加开机自启

systemctl enable docker.service # master+node都需要.

systemctl enable kubelet.service # master+node都需要.mster:先启动kubelet,通过它自启apiserver,controller-manager,scheduler.node:先kubelet后,自动通过kubelet启kube-proxy

到此可以重启一下系统.

四 创建集群

master初始化集群

1.绑定host

[root@master ~]# cat /etc/hostname
master
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.143.130 master
[root@master ~]# hostname
master

2.确保master上的docker已启动

ps axf|grep dockerd

3.(选做)可以将系统镜像里默认开启的rpc暂时关掉,并开机不启动

systemctl stop rpcbind.service rpcbind.socket

systemctl disable rpcbind.service rpcbind.socket

4.master上进行init

[root@ip-10-0-0-105 ~]#
普通执行 kubeadm init --apiserver-advertise-address 10.0.0.105 --pod-network-cidr=10.244.0.0/16
或更改网络段 kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16
或指定k8s版本 kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16 --kubernetes-version=v1.16.1
或指定拉取国内镜像 kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16 --kubernetes-version=v1.16.1 --image-repository=registry.aliyuncs.com/google_containers 失败后的重新初始化(先复位 kubeadm reset)
尝试1.kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
尝试2.kubeadm init --apiserver-advertise-address 0.0.0.0 --pod-network-cidr=10.10.0.0/16 --image-repository=registry.aliyuncs.com/google_containers 提示信息如下(正常执行状态)
[preflight] Running pre-flight checks # kubeadm执行初始化前的检查
[certs] Using certificateDir folder "/etc/kubernetes/pki" # 生成token和证书
[kubeconfig] Using kubeconfig folder "/etc/kubernetes" # 生成kubeconfig文件,kubelet需要这个文件与master通信
[apiclient] All control plane components are healthy after 21.506225 seconds # 安装master组件,会从Google的Registry下载组件的Docker镜像.
[addons] Applied essential addon: CoreDNS # 安装附加组件 kube-proxy和 kube-dns
Your Kubernetes master has initialized successfully! # Kubernetes Master初始化成功 To start using your cluster, you need to run the following as a regular user: # 提示如何配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. # 提示如何安装Pod网络
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node as root: # 提示注册其他的node节点到这个cluster
kubeadm join 10.0.0.105:6443 --token xj0xjp.d6r8fzuecc1ve0bu --discovery-token-ca-cert-hash sha256:cd505e2d2494e429cac81e50942c7c3d4eda50908fddccdb667aefccf0543517

kubeadm join 192.168.143.130:6443 --token cgy56z.02yki9avqnukpxtg \
--discovery-token-ca-cert-hash sha256:152fd4be14843846e48c6752b1bd003bf7fb5e56e22085b31002f6babd58a66f

init报错收集(解决办法)

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[ERROR Swap]: running with swap on is not supported. Please disable swap

a.需要关闭swap,"swapoff -a".

b.echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables (桥接模式/etc/sysctl.conf里net.bridge.bridge-nf-call-iptables = 1 ;如果系统无bridge-nf-call-iptables文件,则"modprobe br_netfilter"向内核中加载该模块).

c.国内访问,会自动docker pull k8s.gcr.io/xxx 需要翻墙(也可以通过从国内pull后打tag的方式变相处理,具体请百度搜索).

5.执行init失败后采取的恢复方法

a.init执行失败,重新执行init的时候,需要添加 --ignore-preflight-errors=all ,这样会生成多个cluster(后期再删除)

b.执行 kubeadm reset 命令将主机恢复原状(注意,会将下载完的多个docker image也一并删除),然后重新执行 kubeadm init 命令再次进行init安装.

master配置kubectl

根据init初始化中的提示(root执行会有一些问题)这里创建一个centos用户来执行.

useradd centos

visudo里添加 centos ALL=(ALL) NOPASSWD: ALL # 涉及拷贝root权限的文件

拷贝配置文件

su - centos;

cd ~; mkdir .kube; sudo cp -i /etc/kubernetes/admin.conf .kube/config; sudo chown $(id -u)

k8s kubernetes 核心笔记 镜像仓库 项目k8s改造(含最新k8s v1.16.2版本)的更多相关文章

  1. k8s创建harbor私有镜像仓库

    1. 部署准备 准备harbor软件包 在部署节点上: mv harbor-offline-installer-v1.4.0.tgz /opt/ && cd /opt tar zxvf ...

  2. Kubernetes 配置私有镜像仓库时,没有权限访问的问题

    使用 K8S 部署服务时,如果指定的镜像地址是内部镜像仓库,那么在下载镜像的时候可能会报权限错误.这是由于在 K8S 中部署服务时,K8S 需要到 Harbor 中进行一次验证,这个验证与节点中使用 ...

  3. 二进制搭建Kubernetes集群(最新v1.16.0版本)

    目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...

  4. K8S(Kubernetes)学习笔记

    Kubernetes(k8s)是google提供的开源的容器集群管理系统,在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理 ...

  5. Kubernetes从私有镜像仓库中拉取镜像

    当我们尝试从私有仓库中拉取镜像时,可能会收到这样提示:requested access to the resource is denied Error response from daemon: pu ...

  6. 【Kubernetes学习笔记】-使用Minikube快速部署K8S单机学习环境

    介绍 https://minikube.sigs.k8s.io/docs/ Minikube 用于快速在本地搭建 Kubernetes 单节点集群环境,它对硬件资源没有太高的要求,方便开发人员学习试用 ...

  7. 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)

    前言 我们之前搭建了第一个docker项目: windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互):https://www.cnblogs.com/xiongze520/p ...

  8. Centos7安装Kubernetes k8s v1.16.0 国内环境

    一. 为什么是k8s v1.16.0? 最新版的v1.16.2试过了,一直无法安装完成,安装到kubeadm init那一步执行后,报了很多错,如:node xxx not found等.centos ...

  9. 知乎十万级容器规模的Java分布式镜像仓库实践

    作者:知乎令孤无忌 前言 知乎在 2016 年已经完成了全量业务的容器化,并在自研容器平台上以原生镜像的方式部署和运行,并在后续陆续实施了 CI.Cron.Kafka.HAProxy.HBase.Tw ...

随机推荐

  1. Autofac 泛型依赖注入

    using Autofac;using Autofac.Extensions.DependencyInjection;using Hangfire;using Microsoft.AspNetCore ...

  2. OpenLDAP的docker版安装

    分为服务器和client的web版. ldap.sh #!/bin/bash -e docker run --name ldap-service -- docker run --name phplda ...

  3. 计算机组成原理——输入输出(I/O)系统考研题

    (一)   I/O系统基本概念 (二)   外部设备 1.     输入设备:键盘.鼠标2.     输出设备:显示器.打印机3.     外存储器:硬盘存储器.磁盘阵列.光盘存储器 (三)   I/ ...

  4. Python中删除空白字符

    主要参考 Stackoverflow答案总结. 空白字符一般指以下几种字符: space,tab, linefeed, return, formfeed, and vertical tab中英文对照表 ...

  5. 一个类实现Java截屏并保存到指定文件夹

    不知小伙伴们有没有遇到过使用java来截屏的需求,截屏后保存到指定的目录,在桌面上没有任何体现,完全不知道已经被截屏了.至于截屏后怎么做,可能有的老铁只是好奇想知道某人在干啥?也有的老铁可能想进行文字 ...

  6. jumpserver 资产管理及授权

    1.用户管理-添加[用户列表] 1.1点击创建用户 1.2创建用户 2.用户管理-添加[用户组] 2.1点击创建用户组 2.2创建用户组   3.资产管理添加资产 3.1添加节点 3.2添加资产(点击 ...

  7. ruby中的数组相关方法介绍

    l = ["a","b","c","d","e","f",'g'] puts l ...

  8. 自己封装Linux命令行万能解压命令

    问题背景 Linux下经常需要解压文件,直接在命令行敲命令解压是最便捷的. 但问题在于,不同的压缩格式,需要用不同命令和不同参数,完全记不住啊. 解决方式 既然记不住,那就换一种思路,假如有一条命令能 ...

  9. weed3-2.2.细讲插入和更新

    Weed3 一个微型ORM框架(只有0.1Mb哦) 源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3 这篇重点讲讲插 ...

  10. 从零开始手写 dubbo rpc 框架

    rpc rpc 是基于 netty 实现的 java rpc 框架,类似于 dubbo. 主要用于个人学习,由渐入深,理解 rpc 的底层实现原理. 前言 工作至今,接触 rpc 框架已经有很长时间. ...