从绫开始的k3s到istio(一):安装K3S

从绫开始的k3s到istio(一):安装K3S

因为k8s太大了嘛,就一直想搞也莫得银子。正巧从逼乎上看到了k3s,也是挺有意思,正好我服务器也能勉强带的动(2C4G)就搞了一个。这个系列主要使用k3s+istio。从k3s安装,配置资源服务,部署代码,自动化构建到状态监控等,会一直更新下去。

K3S安装

安装前有几点注意:

  • hostname。

    因为k3s的node节点有命名规则,只允许字母、数字和中划线(-)。并且节点名称默认名称使用hostname,因此某些云服务商的默认命名可能有问题,比如VM_6。这种节点是无法创建成功的,因此我们首先要重命名hostname。

    sudo hostnamectl set-hostname <newhostname>
  • 用istio代替traefik做反向代理

    因为traefik不支持mysql、redis等协议代理,因此我们用istio做反代

国内源安装k3s

curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="server --no-deploy=traefik --kube-apiserver-arg service-node-port-range=1-65535" sh -

关于安装参数,我们一条一条来解释:

INSTALL_K3S_MIRROR:使用国内源安装

INSTALL_K3S_EXEC:安装参数

  • –no-deploy=traefik:禁用traefik代理。traefik是k3s自带的反向代理,因为我们这里要使用istio做反代,所以把默认的traefik禁用。
  • –kube-apiserver-arg service-node-port-range=1-65535:端口映射范围,api-server默认可映射到宿主的端口范围是30000+,但是我们有些资源或者服务要映射到外部供外部调用,比如80、443、3306等……因此要更改默认范围。前面的–kube-apiserver-arg表示这是一个k8s服务的配置参数。具体可参考文档额外的配置选项

安装kubectl

# 用阿里源安装
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
setenforce 0
yum install -y kubelet kubeadm kubectl

安装验证

  • 检查节点状态

    $ kubectl get node 
    NAME   STATUS   ROLES    AGE     VERSION
    vm6   Ready    master   5d23h   v1.18.3+k3s1
  • 检查节点的污点情况

    # 请检查节点的污点情况,如果是false,则下面可以略过
    $ kubectl describe node vm6 | grep Unschedulable
    Unschedulable:      false
    # 因为我只有一台服务器,所以仅部署了master节点,正常master节点是不允许运行pod的,这里是对master做了污化
    # 移除node.kubernetes.io/unschedulable,或执行以下命令
    $ kubectl taint nodes --all node-role.kubernetes.io/master-
    $ kubectl taint nodes --all node-role.kubernetes.io/master:PreferNoSchedule-
    # 这一步不确定性较大,如果都不可用,请自行根据文档解决,文档地址
    # https://kubernetes.io/zh/docs/concepts/configuration/taint-and-toleration/#%E6%A6%82%E5%BF%B5
  • 检查dns解析情况

    $ nslookup kubernetes.default
    Server:    10.0.0.10
    Address 1: 10.0.0.10 kube-dns.kube-system.svc.cluster.local
    
    Name:      kubernetes.default
    Address 1: 10.0.0.1 kubernetes.default.svc.cluster.local
    # 如果显示NODOMAIN等,请修改/etc/resolv.conf,添加dnsip和search
    
    # 获取kube-dns的endpoint ip
    $ kubectl get endpoints -n kube-system | grep kube-dns
    kube-dns                10.42.0.54:53,10.42.0.54:9153,10.42.0.54:53   6d
    $ vim /etc/resolv.conf
    # nameserver放在第一行
    nameserver 10.42.0.54
    search default.svc.cluster.local svc.cluster.local svc.cluster.local cluster.local
    options ndots:5
    # 若产生其他问题请根据文档解决
    # https://kubernetes.io/zh/docs/tasks/debug-application-cluster/debug-service/#service-%E6%98%AF%E5%90%A6%E9%80%9A%E8%BF%87-dns-%E5%B7%A5%E4%BD%9C

文档地址

K3S中文文档


从绫开始的k3s到istio(一):安装K3S
https://note.0moe.cn/运维/2020/06/19/从绫开始的k3s到istio(一)/
作者
Dawn_南风
发布于
2020年6月19日
许可协议