1、kubernetes安装部署方法:

二进制安装的k8s: 步骤繁琐

ansible 一键自动化安装 https://github.com/easzlab/kubeasz

saltstack 一键自动化安装 https://github.com/unixhot/salt-k8s

kubeadm安装k8s: google官方pull镜像

docker proxy代理

2、环境要求:

机器名 ip地址 cpu和内存要求
master 10.0.0.70 2c2g(关闭swap)
node1 10.0.0.66 2c2g(关闭swap)
node2 10.0.0.67 2c2g(关闭swap)

3、系统优化:(三台主机都要做)

  1. #检查防火墙是否关闭
  2. getenforce
  3. #临时关闭
  4. setenforce=0
  5. #各主机相互解析
  6. cat >> /etc/hosts <<EOF
  7. 10.0.0.70 master
  8. 10.0.0.66 node01
  9. 10.0.0.67 node02
  10. EOF
  11. #禁用swap,然后重启电脑
  12. sed -i '/swap/ s/^/#/g' /etc/fstab && reboot
  13. #各节点同步时间
  14. yum install ntpdate -y
  15. ntpdate ntp1.aliyun.com

4、安装指定版本docker-ce

  1. #配置相关yum源
  2. curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. #安装docker-ce
  4. yum install docker-ce -y
  5. #配置镜像加速器
  6. mkdir /etc/docker
  7. cat > /etc/docker/daemon.json<<EOF
  8. {
  9. "registry-mirrors":["https://71uirsl7.mirror.aliyuncs.com"]
  10. }
  11. EOF
  12. #启动docker并加入开机自启
  13. systemctl start docker
  14. systemctl enable docker

5、在master节点 启动docker的本地仓库,为方便以后拉镜像方便

  1. #拉取registry镜像
  2. docker pull registry
  3. #基于镜像文件启动一个容器
  4. docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry:latest
  5. #修改daemon.json文件,配置为非https的模式,用到pull的主机也需要配置
  6. vim /etc/docker/daemon.json
  7. "insecure-registries": ["10.0.0.70:5000"]
  8. #重新启动docker服务
  9. systemctl restart docker

用脚本经行镜像的拉取以及打标签上传本地仓库

  1. #写一个镜像脚本
  2. vim pull.sh
  3. #!/bin/bash
  4. read -p "请输入镜像名称及版本[xxx:xxx]:" Version
  5. docker pull $Version
  6. docker tag $Version 10.0.0.70:5000/$Version
  7. docker push 10.0.0.70:5000/$Version
  8. docker rmi $Version

6、配置kubernetes的yum源

#所有节点都要配置
cat > /etc/yum.repos.d/kubernetes.repo <<EOF 
[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
#安装组件
yum install kubelet kubeadm kubectl -y
#把kubelet服务加入开机自启
systemctl enable kubelet
#配置内核模块相关参数(检查值是否为1,sysctl -a |grep bride)
cat >/etc/sysctl.d/k8s.conf<<EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
EOF
#让配置生效
sysctl -p /etc/sysctl.d/k8s.conf
#可查看要下载那个镜像文件

7、添加忽略使用swap分区的警告,修改配置文件kubelet

cat >/etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF

8、master和node节点需要的镜像

master

k8s.gcr.io/kube-apiserver:v1.15.0
k8s.gcr.io/kube-controller-manager:v1.15.0
k8s.gcr.io/kube-scheduler:v1.15.0
k8s.gcr.io/kube-proxy:v1.15.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

#node/节点

k8s.gcr.io/kube-proxy:v1.15.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/coredns:1.3.1

9、由于从k8s.gcr.io仓库拉取镜像时间太长,可以考虑使用下面的方法

kubeadm config images list 列出所需的镜像
#使用脚本的方法
vim kube_image.sh 
#!/bin/bash
Url="registry.cn-hangzhou.aliyuncs.com/google_containers"
images=(
kube-apiserver:v1.15.0
kube-controller-manager:v1.15.0
kube-scheduler:v1.15.0
kube-proxy:v1.15.0
pause:3.1
etcd:3.3.10
coredns:1.3.1
)
for imageName in ${images[@]} ; do
    docker pull ${Url}/${imageName}
    docker tag  ${Url}/${imageName}  k8s.gcr.io/${imageName}
    docker rmi  ${Url}/${imageName}
done
docker pull quay.io/coreos/flannel:v0.11.0-amd64  ##网络配置镜像

10、使用kubeadm初始化k8s集群

#选择一个控制节点执行
kubeadm init --kubernetes-version=1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
#--pod-network-cidr=10.244.0.0/16这个是flannel默认的网络地址
#初始化完成后,执行下面的操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#初始化出现[ERROR FileContent--proc-sys-net-ipv4-ip_forward]错误:
--------------------------------------------------------
    [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
#解决方法:
[root@master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
---------------------------------------------------------

11、给k8s集群加入node节点:

#node节点
kubeadm join 10.0.0.70:6443 --token q5bcrb.qj1t2sh8o26kdylp \
    --discovery-token-ca-cert-hash sha256:b40a365e0ff689aa301d0600f5325820aa73ea1a28e40570fe09e5dddeee2ded 
#出现[ERROR FileContent--proc-sys-net-ipv4-ip_forward]错误:
--------------------------------------------------------
    [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
#解决方法:
[root@master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

12、为k8s集群配置网络插件

#每台主机拉取网络配置镜像
docker pull quay.io/coreos/flannel:v0.11.0-amd64
#第一种方法:直接引用 master
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#第二种方法把需要的yml文件下载本地然后再生成资源
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#修改kube-flannel.yml文件,优化网络
vim /kube-flannel.yml
----------------------
net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan",
        "Directrouting": true     #加一条配置
      }
    }
------------------------
#生成资源
kubectl create -f kube-flannel.yml
#检测资源
kubectl get pods -n kube-system
#检测node节点
kubectl get nodes

kube-flannel.yml

13、查看k8s集群信息

kubectl cluster-info
#查看节点是否正常
kubectl get nodes
#查看目前运行的pod资源是否正常
kubectl get pods -n kube-system

14、修改对外暴露的端口范围

编辑apiserver配置文件
vim /etc/kubernetes/manifests/kube-apiserver.yaml
- command:   #添加一条配置 
- --service-node-port-range=1-65535
#重启apiserver
kubectl delete pod kube-apiserver-master -n kube-system

15、kubectl 命令补全

source  <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc